一个笔试题,求解答
求输出结果
希望大神能解释下A b=new B(); 谢谢
class A{
String str="A";
A(){
init();
}
public void init(){
System.out.println(str);
}
}
class B extends A{
String str="B";
B(){
super();
}
public void init(){
System.out.println(str);
}
}
public static void main(String[] args){
A b=new B();
System.out.println(b.str);
}
[解决办法]
输出应该是:A
—— 成员属性可没有“重写”的概念
希望大神能解释下A b=new B(); 谢谢
—— 需要解释啥?父类的变量自然可以引用子类的对象。
—— 比如: Object obj = new String("123"); 这不是很正常的事情么?
[解决办法]
new B();调用B(){}
B()调用父类的构造(super),
A()构造调用init,调用的是(new B()).init();
###########至此,B的init方法输出,完成构造
执行System.out,(A)b.str输出
执行结果:
null
A
[解决办法]
这个多态最主要的问题在于F s = new S();中s可以使用子类重写父类的方法,但是不用使用子类独有的属性和方法。这样就很清楚了!
[解决办法]