想请问各位大大 这程式码输出结果为什么是这样?
就物件导向程式而言,现有如下的继承关系的类别。
class GrandFather{
String name = "GrandFather";
String getName(){return name;}
String whereIam(){return"class GrandFather";}
}
class Father extends GrandFather{
String getName(){return name;}
String whereIam(){return"class Father";}
}
class Son extends Father{
String name = "Son";
String getName(){return name;}
String whereIam(){return"class Son";}
}
class Daughter extends Father{
String getName(){return name;}
String whereIam(){return"class Daughter";}
}
于其他类别方法中使用如下的statement:
Father f1 = new GrandFather();
Father f2 = new Son();
Father f3 = new Daughter();
System.out.println(f2.getName());
System.out.println(f3.getName());
System.out.println(f2.whereIam());
System.out.println(f3.whereIam());
请问编译执行后,会显示什么结果?如为语法有误或执行时期发生中断,请说明原因,
并将该statement予以忽视,然后说明可以正确执行statement所产生的结果。
这是输出结果
Son
Daughter
class Son
class Daughter
我知道Father f1 = new GrandFather(); 一定错
因为子类物件宣告不可用父类new
主要是后面
System.out.println(f3.getName());
在Daughter中并没有设定name为何输出会是Daughter?
我预期这行应该是GrandFather 因为他是继承上层类别且没复写
请问我这样想有错吗?