java - 使用父类(super class)的构造函数

标签 java inheritance constructor super

Java不允许多重继承,就是说一个类不能继承自两个没有任何共同点的类,也就是说它们不在同一条继承路径上。但是,如果这些类是该类的直接父类(super class)的父类(super class),则一个类可以继承多个类。但是该类间接继承自这些类,这意味着它不会从这些上层父类(super class)中“看到”任何东西,对吗?在考虑构造函数(在构造函数中使用 super() )时,我感到困惑。例如,如果我们有以下类:

public class A {
    public A() { 
      .... 
    }
}

public class B extends A {
    public B() {
      super();
      ....
    }
}

public class C extends B {
    public C() {
      super();
      ....
   }
}

类 C 的构造函数首先使用 super() 调用类 B 的构造函数。发生这种情况时,B 的构造函数本身首先调用 A 的构造函数(使用 super()),但是 C 的构造函数对 A 的构造函数一无所知,对吧?我的意思是,继承仅来自直接父类(super class)——继承层次结构中的第一个(最近的)类。这是我的问题——对于 super() ,我们只表示直接父类(super class)的构造函数,无论我们在继承层次结构中有多少其他类。 这不仅适用于构造函数,还适用于任何方法和实例变量..

问候

最佳答案

您必须在直接基类中调用一些 构造函数。这可以是

public class A {
     public A() { 
      .... 
     }
    public A(String foo) { 
      .... 
    }
}

public class B extends A {
    public B() {
        super();
        .. or ..
        super("ThisIsAB")
    }
}

public class C extends B {
    public C() {
      super();
      ....
   }
}

因此对于构造函数,您无法避免构建中间基类,但您可以选择使用哪个构造函数。如果只有无参数构造函数,它会通过隐式调用 super 为您处理。使用多个构造函数,您有更多选择。

super 可以引用任何基类中的任何非私有(private)变量或方法。所以方法和变量在这方面与构造函数不同。

关于java - 使用父类(super class)的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/417999/

相关文章:

java - 重写方法的多态参数

java - 什么是 NullPointerException,我该如何解决?

c# - 处理类继承自抽象类和类型参数

c++ - 继承 - 不同的文件 (C++)

c++复制构造函数中的用户定义成员

java - 链表之外的字符串,对象的高效构造函数

java - java中的菜单方法

java - 如何在静态方法中使用实例变量

Java派生子类对象无法解析符号

java - 如何从构造函数中获取值到方法中?