在java的多级继承中,我们可以从第二个子类调用一个超类构造函数吗

在java的多级继承中,我们可以从第二个子类调用一个超类构造函数吗,java,inheritance,Java,Inheritance,假设有三个类A、B和C。C扩展了B,B扩展了A。我们可以直接调用A类构造函数而不调用子类C中的B类构造函数吗?否。子类的构造函数将显式或隐式调用其超类的一个构造函数来初始化自身。不能调用其他类的构造函数,除非初始化不同的对象,无论这些类与被初始化的类的关系如何。否。子类的构造函数将显式或隐式调用其超类的一个构造函数来初始化自身。不能调用其他类的构造函数,除非初始化不同的对象,无论这些类与被初始化的类的关系如何。我认为这是不可能的。 无论如何,如果C与B无关,但与A有关,为什么C首先要扩展B 您还

假设有三个类A、B和C。C扩展了B,B扩展了A。我们可以直接调用A类构造函数而不调用子类C中的B类构造函数吗?

否。子类的构造函数将显式或隐式调用其超类的一个构造函数来初始化自身。不能调用其他类的构造函数,除非初始化不同的对象,无论这些类与被初始化的类的关系如何。

否。子类的构造函数将显式或隐式调用其超类的一个构造函数来初始化自身。不能调用其他类的构造函数,除非初始化不同的对象,无论这些类与被初始化的类的关系如何。

我认为这是不可能的。 无论如何,如果C与B无关,但与A有关,为什么C首先要扩展B

您还可以尝试在中创建一些受保护的方法,这些方法可以从A和C的构造函数中调用


如果您可以尝试描述您试图建模的内容,也许其他层次结构更合适。

我认为这是不可能的。 无论如何,如果C与B无关,但与A有关,为什么C首先要扩展B

您还可以尝试在中创建一些受保护的方法,这些方法可以从A和C的构造函数中调用


如果你能试着描述你想建模的东西,也许其他的层次结构会更合适。

不,你不能,虽然子类的构造函数在创建其对象时首先开始执行,但是在子类的构造函数中始终没有对super的arg构造函数调用,除非您使用参数手动调用super等等。按照这个层次结构,最顶层父类的构造函数虽然最后开始执行,但首先完成

不可以,尽管子类的构造函数在创建其对象时首先开始执行,但在子类的构造函数中始终存在对super的无参数构造函数调用,除非您使用参数手动调用super等等。按照这个层次结构,最顶层父类的构造函数虽然最后开始执行,但首先完成

不直接。。但类似的事情是可以做到的:

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

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

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

// In main()
C c = new C(); // This will eventually call A's constructor

不是直接的。。但类似的事情是可以做到的:

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

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

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

// In main()
C c = new C(); // This will eventually call A's constructor

为什么不试试看呢?不,总是调用一个可能隐式的超级构造函数,然后初始化所有字段,并执行构造函数的其余部分。这没有意义。A是B的子集是C的子集。通过调用B,您自动得到A。如果您不想要B,但想要A,那么将D扩展为其他内容。为什么不试试看呢?不,总是调用一个可能隐式的超级构造函数,然后初始化所有字段,并执行构造函数中的其余部分。这没有意义。A是B的子集是C的子集。通过调用B,您自动得到A。如果您不想要B,但想要A,则定义D将A扩展为其他内容。+建议提问者描述问题。如果没有一个具体的例子,就不可能真正地讨论问题和解决方案。+一个是关于提问者描述问题的建议。如果没有具体的例子,就不可能真正讨论问题和解决方案。