回 帖 发 新 帖 刷新版面

主题:一条把我搞残的题,各位请进,帮帮我!!

.题如下:
  classA{
  private int a=1;
  }

  class B extends A{
  private int b=2;
  }

  public class C extends B{
  private int c=3;
  public static void main(String[] args){
  new C();
  }
  }
  其中,每个类都要进行自动初始化,指定初始化,调用构造器进行初始化,请问:这三个类的三个初始化的顺序是怎样的?最好能写出理由!!!先谢过!!

回复列表 (共10个回复)

沙发

我是java新手,不是很能理解你说的题目意思,下面的回答是我自己的理解:

   创建一个子类对象的同时会创建父类对象,从构造方法来看就是子类的构造方法会调用父类的构造方法,子类对象通过super关键字来调用父类的构造方法。当一个子类构造方法没有显示使用super关键字去调用父类的某个构造方法时,编译器会在默认的子类构造方法中添加super(),并且这个命令必须在子类构造方法的第一行,也就是会首先调用父类中没有参数的构造方法。所以如果要创建一个B类的实例时,会首先调用A类的构造方法,创建C类时,会先调用B类的构造方法,而B类又会调用A类的构造方法。所以new C(),首先调用的是A类的构造方法,然后调用B类的构造方法,最后再调用C类的构造方法。
   
   不知道这样的回答对不对啊,希望对你有帮助~~~

板凳

能解答的就不算新手了。佩服!

3 楼

飘过~~~

4 楼

[quote]我是java新手,不是很能理解你说的题目意思,下面的回答是我自己的理解:

   创建一个子类对象的同时会创建父类对象,从构造方法来看就是子类的构造方法会调用父类的构造方法,子类对象通过super关键字来调用父类的构造方法。当一个子类构造方法没有显示使用super关键字去调用父类的某个构造方法时,编译器会在默认的子类构造方法中添加super(),并且这个命令必须在子类构造方法的第一行,也就是会首先调用父类中没有参数的构造方法。所以如果要创建一个B类的实例时,会首先调用A类的构造方法,创建C类时,会先调用B类的构造方法,而B类又会调用A类的构造方法。所以new C(),首先调用的是A类的构造方法,然后调用B类的构造方法,最后再调用C类的构造方法。
   
   不知道这样的回答对不对啊,希望对你有帮助~~~[/quote]
同意此看点

5 楼

同意上述两位观点,运行debug一下,看看顺序

6 楼


建议继承一个父类 需要属性再在Class 添加,不要多个继承~~那样下面出现点小故障容易乱~~而且需要改的也太多了

7 楼


class A {
    private int a = 1;
    public A(){
        System.out.println("a");
    }
}

class B extends A {
    private int b = 2;
    public B(){
        System.out.println("b");
    }
}

public class C extends B {
    private int c = 3;
    public C(){
        System.out.println("c");
    }
    public static void main(String[] args) {
        new C();
    }
}

8 楼

先父类构造再子类构造。

9 楼

从父类开始实例化,一次类推


_________________________________________________________
新建的java超级群,有兴趣的可以加一下,大牛小虾汇聚一堂! 哈哈!
共享有很多资料,可以供高手进阶,新手学习!

名字:In'8 技术联盟[精英]
群号:93133286   

10 楼

这人气真旺啊,不过初始化什么意思?

我来回复

您尚未登录,请登录后再回复。点此登录或注册