class A{
String str="A";
{
//System.out.println("nimama");
}
A(){
init();
}
public void init(){
System.out.println("str");
}
}
class B extends A{
String str="B";
B(){
super();//init();
}
public void init(){
System.out.println(str);
}
public static void main(String[] args){
A c=new B();
System.out.println(c.str);
}}
String str="A";
{
//System.out.println("nimama");
}
A(){
init();
}
public void init(){
System.out.println("str");
}
}
class B extends A{
String str="B";
B(){
super();//init();
}
public void init(){
System.out.println(str);
}
public static void main(String[] args){
A c=new B();
System.out.println(c.str);
}}
首先构造B的时候会自动调用其父类的构造方法,所以
B(){
super();
}
可以省略,不影响结果
当构造B时会先构造其父类A,所以new B()之前会把A new出来
第一步生成A的成员变量然后赋值,第二步执行A的构造方法,就是调用init()方法,因为调用方法的时候会先检查这个方法是否有重写,会发现B重写了这个方法,所以实际上调用的是B的init()方法,而B的init方法打印的是this.str,这个时候B.str还没有赋值所以打印的是null。
第二个问题,多态指多各类可以定义不同的同名方法(名称相同,功能不同),但数据成员应依据类名
也不知道说清楚没。。你试着画一下内存图就会很明白了
水果 a = new 桔子();不再解释