2013-06-02 2 views
0

Я хотел бы сделать копию объекта SubClass в конструкторе BaseClass. Мне нужно, чтобы следующий код выполнялся правильно.Как скопировать объект SubClass в конструктор копии BaseClass

class BaseClass{ 
    BaseClass() {} 
    BaseClass(BaseClass base) { 
     //TODO: how to implement? 
    } 
} 

class SubClass extends BaseClass {  
    SubClass() {} 
} 

public class Test { 
    public static void main(String[] args) { 

     BaseClass sub = new SubClass(); 
     BaseClass subCopy = new BaseClass(sub); 
     if (subCopy instanceof SubClass) { 
      // need to be true 
     } 
    } 
} 

Возможно ли это? Если да, то как я могу это сделать? Иначе как я могу получить аналогичный эффект?

ответ

3

Это невозможно. Конструктор класса A дает вам экземпляр A, чтобы не обойти это. Почему бы не создать экземпляр подкласса явно?

Другая возможность может включать в себя статический метод фабрики как:

public static BaseClass create(BaseClass input) { 
     // return BaseClass or subclass 
} 
0

Вы, кажется, имеющий дизайн вверх-вниз. Если вам нужно делать то, что вы просите, вам нужно пересмотреть свой дизайн. В идеале в вашем конструкторе подкласса вы должны копировать или инициализировать свойства базового класса, вызывая super().

1

Похоже, вы хотите, чтобы объект BaseClass являлся экземпляром SubClass, который расширяет BaseClass.

Возможно ли это?

-Нет. Это невозможно.

Оператор instanceof возвращает true, если переменная на левой стороне удовлетворяет IS-A состояние переменной или класса на левой стороне.

SubClassIS-АBaseClass, поскольку она простирается BaseClass. Но BaseClass никогда не может быть SubClass, так как он не может продлить SubClass.

Смежные вопросы