5 回答
TA贡献1865条经验 获得超7个赞
我自己来回答这个问题吧,今天研究了下,可能是我对继承的理解不太对。
这里子类SmallHomeTest,虽然继承了父类的HomeTest的printHome()方法,其实仅表示,子类可以以父类的身份去调用父类的printHome()方法,而不是指子类有这个方法。
所以说,当编译执行时候,编译器发现子类里的small.printHome()语句时,会先检查子类有没有printHome方法,如果没有,再看其父类有没有,如果有,则是以父类的身份,来调用这个printHome()方法,则里面的home变量是来自父类的private home变量(父类是看不到子类定义的的private home变量的)。
TA贡献1871条经验 获得超13个赞
public class Entry {
public static void main(String[] args) {
SmallHomeTest small = new SmallHomeTest();
small.printHome();//........①
}
}
你①处代码调用的
public void printHome() {
System.out.println(home);
}
用public修饰,这和
public String getHome() {
return home;
}
没区别。
TA贡献1744条经验 获得超4个赞
多态性并不能体现在字段上。
0: aload_0
1: invokespecial #10 // Method java/lang/Object."<init>":
()V
4: aload_0
5: ldc #12 // String This is HOME
7: putfield #14 // Field home:Ljava/lang/String;
10: return
public void printHome();
Code:
0: getstatic #21 // Field java/lang/System.out:Ljava/
io/PrintStream;
3: aload_0
4: getfield #14 // Field home:Ljava/lang/String; //这里getfield #14就是上面putfield #14 ,内容是死的。
7: invokevirtual #27 // Method java/io/PrintStream.printl
n:(Ljava/lang/String;)V
10: return
添加回答
举报