Java:子类构造函数如何中和父类构造函数?

Java:子类构造函数如何中和父类构造函数?,java,inheritance,Java,Inheritance,子类构造函数如何中和父类构造函数 我的意思是,在子构造函数中,我们必须使用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

子类构造函数如何中和父类构造函数

我的意思是,在子构造函数中,我们必须使用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);
  }    
}

扩展父对象,该对象在初始化子对象时初始化。除了需要初始化外,父级还需要一个名称。这只能在初始化子对象时给出


所以要回答你们的问题,不,为什么你们要对某个东西进行子类化而不是构造它?如果您的代码需要这样做,那可能是因为糟糕的设计。Java确实要求您调用父级的构造函数。

在这里,“父级”和“子级”不是合适的词。孩子不是一种父母(我当然希望我的孩子至少再过十年也不是这样,但那是另一回事)

考虑使用不同名称的相同代码:

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);
}

}

现在,你怎么能让大象不是动物呢?

子类可以通过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
}

现在,当您创建一个子对象时,父对象中的方法将使用…(System.in)作为输入,而不是使用…(filename)

您不能这样做。通过将“extensedanimal”声明为大象类的一部分,您已经对大象进行了子类化。所有的大象都是动物。@Joshua:事实上,大象是一个亚类(名词)。它是动物的子类(如动词)。它在编写测试时可能很有用。@xdhmoore想详细说明一下吗?我认为,需要模拟超类构造函数的测试可能表明设计存在问题。我昨天更新了一些单元测试,其中一个类的构造函数中有一个DB连接,该类正通过Mockito进行监视。在测试的构建过程中,它抛出了一个异常(并记录和接受它)。我想在不调用父级的情况下重写这个构造函数会很好。我最终制作了一个具有不同签名的子类构造函数。事实上,我得到一些反馈,认为这是一个糟糕的解决方案,但这正是我所想的情况。