我们如何调用grand parent的构造函数。我该如何调用盛大父类的构造函数?
例如:B
继承自A
和C
继承自B
。
我需要在C
中调用A
的构造函数。有没有可能创建B
的实例?
如果我需要这个如何在Java中实现。
我们如何调用grand parent的构造函数。我该如何调用盛大父类的构造函数?
例如:B
继承自A
和C
继承自B
。
我需要在C
中调用A
的构造函数。有没有可能创建B
的实例?
如果我需要这个如何在Java中实现。
使用super()
从C和从B到访问的构造函数
class A {
public A() {
System.out.println("A");
}
}
class B extends A {
public B() {
super();
System.out.println("B");
}
}
class C extends B {
public C() {
super();
System.out.println("C");
}
}
public class Inheritance {
public static void main(String[] args) {
C c = new C();
}
}
输出:
一个
乙
Ç
注:
如果全部都是默认构造函数,那么不需要来编写它会隐式调用它。
如果有参数化的构造函数,然后super(parameter..)
需要
thanxs给了一个例子... – 2010-12-09 12:40:26
你不能调用的A
构造直接的C
构造。
虽然你可以(实际上必须)间接调用它。 B
的每个构造函数都必须调用构造函数A
(显式或隐式)。由于C
的每个构造函数都需要调用B
的构造函数之一,因此您将总是称为A
的构造函数之一。
D同样也叫B的构造函数,并反过来B就调用构造函数... 有没有其他选择调用大父类的构造
一个例子勒夫的回答是:
class A {
A() { System.out.print("A()")};
A(Object o) { System.out.print("A(Object)")};
}
class B {
B() { super(); System.out.print("B()")};
B(Object o) { super(o); System.out.print("B(Object)")};
}
class C {
C() { super(); System.out.print("C()")};
C(Object o) { super(o); System.out.print("C(Object)")};
}
现在称:
C c = new C();
会产生:A()B()C()
,同时通话ing:
C c = new C(new Object());
将产生:A(Object)B(Object)C(Object)
。
正如你所看到的,通过操纵super()
调用你可以实际调用显式父构造函数。
实际上,如果你有B类扩展类A,当你创建类B的实例时,你无法避免调用A的构造方法。如果这种机制似乎并不清楚,我推荐这篇关于Java继承系统的文章:http://download.oracle.com/javase/tutorial/java/IandI/subclasses.html。
下面是一个例子:
class A {
public A() {
doSomethingA();
}
}
class B extends A {
public B() {
super(); // this is the call to the A constructor method
doSomethingB();
}
}
class C extends B {
public C() {
super(); // this is the call to the B constructor method
doSomethingC();
}
}
创建具有new C()
一个新的对象将涉及按顺序的A() - B() - C()
你能否提供更多细节,为什么你需要调用盛大父类的构造主叫不叫父母的?如果C类需要在不调用类B的构造函数的情况下调用类A的构造函数,那么听起来像您可能需要查看您的设计,而不是试图找出一种方法来跳过调用父类的构造函数。 – ihatemash 2010-12-09 12:49:36