大家好,最近几天开始看thinking in java。看到继承与初始化这里有点搞不清楚概念。
举个例子:我先写一个类a,里面有类变量、实例变量以及一些方法。然后我再写一个类b继承a,再加几个类变量、实例变量。然后在这个类b中写个main函数,new一个b类的实例。这时候初始化的顺序应该是怎样的呢?(类变量和实例变量都在定义的位置直接给赋值了)看了一下午书了,目前我的理解是:先按照声明的顺序,对基类a里面的类变量进行初始化,然后是对导出类b中新增的类变量按照声明顺序初始化。然后导出类b的构造器被调用,开始进入到b的构造器后,默认调用基类a的构造器,然后进入a的构造器后发现a就是根基类了,不用再调用更高一层的a的基类的构造器了,于是对类a里面的实例变量进行初始化。然后再调用类a的构造器的主体。然后回到b的构造器了,对类b中新增的实例变量进行初始化,然后调用类b的构造器主体,完成整个初始化。不知道我的理解对不?还请大家指点。但是我翻看书中更靠前一点儿的地方时发现这样一句话:在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们扔就会在任何方法(包括构造器)被调用之前得到初始化。这句话好像又和我上面自己的理解有些矛盾。如果说把上面这句话最后一点改成“它们会在任何方法(包括构造器<构造器的主体>)被调用之前得到初始化”。这样好像能自圆其说一些。不过以上都是我自己的猜想,迷迷糊糊ing,还请高手指点,谢谢了。
帮帮我这个小菜鸟吧。
举个例子:我先写一个类a,里面有类变量、实例变量以及一些方法。然后我再写一个类b继承a,再加几个类变量、实例变量。然后在这个类b中写个main函数,new一个b类的实例。这时候初始化的顺序应该是怎样的呢?(类变量和实例变量都在定义的位置直接给赋值了)看了一下午书了,目前我的理解是:先按照声明的顺序,对基类a里面的类变量进行初始化,然后是对导出类b中新增的类变量按照声明顺序初始化。然后导出类b的构造器被调用,开始进入到b的构造器后,默认调用基类a的构造器,然后进入a的构造器后发现a就是根基类了,不用再调用更高一层的a的基类的构造器了,于是对类a里面的实例变量进行初始化。然后再调用类a的构造器的主体。然后回到b的构造器了,对类b中新增的实例变量进行初始化,然后调用类b的构造器主体,完成整个初始化。不知道我的理解对不?还请大家指点。但是我翻看书中更靠前一点儿的地方时发现这样一句话:在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们扔就会在任何方法(包括构造器)被调用之前得到初始化。这句话好像又和我上面自己的理解有些矛盾。如果说把上面这句话最后一点改成“它们会在任何方法(包括构造器<构造器的主体>)被调用之前得到初始化”。这样好像能自圆其说一些。不过以上都是我自己的猜想,迷迷糊糊ing,还请高手指点,谢谢了。
帮帮我这个小菜鸟吧。
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");
}
}能不能发出去啊,看看先
----------------------------------------
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
}
}