public class A {
public static void main(String[] args) {
B33 b=new B33();
}
}
class B{
public B(){
System.out.println("我是B");
}
}
class B2 extends B{
public B2(){
System.out.println("我是B2");
}
}
class B33 extends B2{
public B33(){
System.out.println("我是B33");
}
}
知道答案的各位能不能告诉我下
怎样才能调用子类的无参构造而不会调用父类的
继承在本职上是特殊——一般的关系,即常说的is-a关系。子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的
一些属性或方法。
2. 继承中的初始化顺序
类初始化:
在jvm装载类的准备阶段,首先为类的所有类属性和类初始化块分配内存空间。并在类首次初始化阶段中为其进行初始化,类属性和类初始化块之间
的定义时的顺序决定了其初始化的顺序。若类存在父类,则首先初始化父类的类属性和类初始化块,一直上溯到Object类最先执行。
对象初始化:
在new创建对象时,首先对对象属性和初始化块分配内存,并执行默认初始化。如果存在父类,则先为父类对象属和初始化块先分配内存并执行初始化。
然后执行父类构造器中的初始化程序,接着才开始对子类的对象属性和初始化块执行初始化。
最后一句是重点,不要想着私有化父类的构造器和上面的偷梁换柱的做法,这是java的特性
子类必须调用父类的构造器后才能自己进行初始化
无法在父类没有构造函数的情况下产生子类。
没有在子类中显示使用super( )方法时会自动调用父类的构造函数。
应该只能在父类中定义多个构造函数,然后再子类中使用super(不同参数)来区别调用。
public class A {
public static void main(String[] args) {
B33 b = new B33();
}
}
class B {
public B(int x) {
System.out.println("我是B");
}
public B(){
}
}
class B2 extends B {
public B2() {
super(1);
System.out.println("我是B2");
}
public B2(int x){
}
}
class B33 extends B2 {
public B33() {
super(1);
System.out.println("我是B33");
}
}
以上代码运行结果为
我是B33