Java: Как может быть дочерний класс конструктора класса нейтрализовать родительский конструктор? - PullRequest
3 голосов
/ 18 августа 2010

Как может класс конструктора дочернего класса нейтрализовать родительский конструктор?

Я имею в виду, что в конструкторе дочернего элемента мы должны использовать super () - существует ли способ создания родительского объекта?

Пример с супер:

class abstract Parent{
  protected String name; 
  public Parent(String name){
    this.name=name;
  }
}

class Child extends Parent{
  public Child(String name,int count){
    super(name);
  }    
}

Ответы [ 4 ]

4 голосов
/ 18 августа 2010

«Родитель» и «ребенок» здесь не подходят. Ребенок - это не тот тип родителей (я, конечно, надеюсь, что мои дети не дольше, по крайней мере, еще десять лет, но это другой вопрос).

Рассмотрим один и тот же код с разными именами:

class abstract Animal{
protected String name; 
public Animal(String name){
 this.name=name;
 }
}

class Elephant extends Animal{
public Elephant(String name,int count){
  super(name);
}

}

Теперь, как вы можете иметь слона, который не является животным?

1 голос
/ 28 апреля 2012

Дочерний класс может изменить то, на что указывают объекты в родительском конструкторе, с помощью super.ParentClassVariable = thingToBeChanged;

class Parent
{
    BufferedReader inKeyboard;
    public Parent()
    {
        inKeyboard = new BufferedReader (new InputStreamReader(System.in));
    }
}

class Child extends Parent
{ 
    public Child()
    {
        super.inKeyboard = new BufferedReader(new FileReader(filename)); 
    }//changes the pointer in the parent object to point to a different reader
}

Теперь, когда вы создаете дочерний объект, вместо использования методов в Parent ... (System.in) в качестве входных данных, методы в Parent будут использовать ... (имя файла)

1 голос
/ 18 августа 2010

Зачем вам создавать подклассы, а не создавать их? Если ваш код требует этого, это, вероятно, из-за плохого дизайна. Java требует, чтобы вы вызывали конструктор родителя.

1 голос
/ 18 августа 2010

Вы расширяете родительский объект, который инициализируется при инициализации дочернего объекта. Ну, как требование для инициализации, родитель требует имя. Это может быть дано только при инициализации дочернего объекта.

Итак, чтобы ответить на ваш вопрос, нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...