关于继承与初始化以及构造器

dracula_zby 2008-01-31 09:52:13
大家好,最近几天开始看thinking in java。看到继承与初始化这里有点搞不清楚概念。
举个例子:我先写一个类a,里面有类变量、实例变量以及一些方法。然后我再写一个类b继承a,再加几个类变量、实例变量。然后在这个类b中写个main函数,new一个b类的实例。这时候初始化的顺序应该是怎样的呢?(类变量和实例变量都在定义的位置直接给赋值了)

看了一下午书了,目前我的理解是:先按照声明的顺序,对基类a里面的类变量进行初始化,然后是对导出类b中新增的类变量按照声明顺序初始化。然后导出类b的构造器被调用,开始进入到b的构造器后,默认调用基类a的构造器,然后进入a的构造器后发现a就是根基类了,不用再调用更高一层的a的基类的构造器了,于是对类a里面的实例变量进行初始化。然后再调用类a的构造器的主体。然后回到b的构造器了,对类b中新增的实例变量进行初始化,然后调用类b的构造器主体,完成整个初始化。

不知道我的理解对不?还请大家指点。

但是我翻看书中更靠前一点儿的地方时发现这样一句话:在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们扔就会在任何方法(包括构造器)被调用之前得到初始化。

这句话好像又和我上面自己的理解有些矛盾。如果说把上面这句话最后一点改成“它们会在任何方法(包括构造器<构造器的主体>)被调用之前得到初始化”。这样好像能自圆其说一些。

不过以上都是我自己的猜想,迷迷糊糊ing,还请高手指点,谢谢了。
帮帮我这个小菜鸟吧。
...全文
75 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johnson_Hong 2008-02-01
  • 打赏
  • 举报
回复
初始化的顺序应该是这样的
----------------------------------------
public class Parent {
private String name="1"; //1
public Parent(){
System.out.println("父类初始化");//3
}
private String id="1"; //2
}
-------------------------------------------------
public class Child extends Parent{
private String stNo="1"; //5
private String schoolName="1";//6
public Child(){
System.out.println("子类初始化");//8
}
private String schoolNo="1";//7
}

------------------------------------------------
public class Test {

public static void main(String[] args) {
Child c = new Child(); //0
}
}
yami251139 2008-02-01
  • 打赏
  • 举报
回复
好像是調用方法的時候(具體看方法怎么寫)才初始化變量的吧
反正肯定不是按聲明順序
構造器是在加載類的時候初始化的
dracula_zby 2008-01-31
  • 打赏
  • 举报
回复
楼上的是在回答我的问题?
zhangkuisky 2008-01-31
  • 打赏
  • 举报
回复

public class Test{
public static void main(String[] args){
Father f = new Father("父亲",45);
f.showinfo();
}
}

class Father{
public String name;
public int age;
public Father(String name,int age){
this.name=name;
this.age=age;

}
public void showinfo(){
System.out.println("My name is "+name+" and I am "+age+"years old");
}
}



能不能发出去啊,看看先

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧