2015-10-06 4 views
-4

Пусть предположим, что мы имеем:Легкий способ создания объекта из базового класса

class A { 
} 

а также

class B extends A { 

    B(A object) { 
    this = object; //this is not possible. 
    } 
} 

Как мы знаем, мы не можем установить любое значение ключевых слов в Java (это). Есть ли слишком простой способ создать объект B, который имеет те же значения полей с объектом A?

+2

ли вы имеете в виду, как создать конструктор копии самым простым способом? –

+0

yeap. это слишком абсурдный вопрос? я получил отрицательные очки – user14570

+1

Я не думаю, что это абсурд, но похоже, что вы даже не пробовали. Я бы просто создал конструктор копирования в базовом классе, а в подклассах - 'super (a);'. Теперь, если вы наивно спросите *, должен ли я сгенерировать копию нескольких полей вручную? * Ответ будет следующим: убедитесь, что это сделано с помощью средства создания кода или кода, но код должен быть там. –

ответ

2

Самый простой способ - скопировать все поля один за другим. Нет более простого способа. Вы можете написать инструмент для создания этого кода для вас. В общем, этого избежать в Java (возможно, потому, что это болезненно и подвержено ошибкам), и делегирование часто используется, если нет более простого решения вашей проблемы. то есть обычно есть альтернатива.

+0

Хм, я понял. Кстати, есть ли у Java: новый синтаксис A() {this.f = f, ...}, подобный C#? – user14570

+1

@ user14570, который seriosly демонстрирует, что вам нужно изучить основы Java. Не пытайтесь спешить, чтобы что-то сделать, если вы не посвятите время изучению основ. –

1

Это не может работать как переменная, которая является последней. Таким образом, вы могли бы сделать что-то вроде этого:

public class A { 

     private String hello; 
     private String something; 

     public A(String hello, String something){ 
      this.hello = hello; 
      this.something = something; 
     } 

     public String getHello() { 
      return hello; 
     } 

     public void setHello(String hello) { 
      this.hello = hello; 
     } 

     public String getSomething() { 
      return something; 
     } 

     public void setSomething(String something) { 
      this.something = something; 
     } 

} 

Вы можете использовать класс A в B, как показано ниже:

public class B extends A{ 

     public B(A object) { 
     super(object.getHello(),object.getSomething()); 
     } 

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