java继承的问题求解答

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");
}
}
知道答案的各位能不能告诉我下
怎样才能调用子类的无参构造而不会调用父类的

  1. 继承的概念:

继承在本职上是特殊——一般的关系,即常说的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