Copy an object without creating an instance

I'm trying to create a copy of my Board object, but it doesn't seem to be an instance. Can someone tell me why?

    class Board {
       private Board _copyBoard; 
       private int _size;
       public Board (int N) {
          _size = N;
       }
       public Board (Board b) {
            this._copyBoard = b;
       }
       int size() {
            return _size;
       }
    }

When I do this:

    Board b = new Board(4);
    Board x = new Board(b);
    System.out.println(x.size()); --> 0 instead of 4.
+4
source share
3 answers

The copy constructor usually needs to copy the instance variables and, if necessary, some deep state - do not store the link to the source object.

, . - , if, , , , /.

public class Board {
   protected int      size;
   protected Cell[][] grid;
   public Board (int N) {
      this.size = N;
      // for example, create a 2D array.
      this.grid = new Cell[size][size];
   }
   public Board (Board orig) {
       this.size = orig.size();
       // deep-copy the grid.
       this.grid = new Cell[size][];
       for (int i = 0; i < size; i++) {
          grid[i] = Arrays.copyOf( orig.grid[i], size);
      }
   }
   public int size() {return size;}
}

protected , .

, ( ) this.. .

; . . , add (List<Customer> customers) customerList.

+1
Board b = new Board(4);

, _size = 4.

Board x = new Board(b);

, _copyBoard = b.

System.out.println(x.size());

_size . _size .

,

    public Board (Board b) {
     this._copyBoard = b;
    }

    int size() {
     if(_copyBoard != null) { 
       return _copyBoard.size(); 
     } else { 
       return _size; 
     }
    }

, , , , if.

class Board {
    private int _size;
    public Board (int N) {
       _size = N;
    }
    public Board (Board b) {
        _size = b.size();
    }
    int size() {
        return _size;
    }
}
0

 Board b = new Board(4);
 Board x = new Board(b);
System.out.println(x._size); 

class Board {
    public Board _copyBoard; 
    public int _size;
    public Board (int N) {
       this._size = N;
    }
    public Board (Board b) {
         this._size = b._size;
    }
    int size() {
         return _size;
    }
 }

x, X

,

System.out.println(x._copyBoard._size); 
0

All Articles