父类public class Person{ private String name; public Person(String name){ this.name=name;
} public void setName(String name){ this.name=name;
} public String getName(){ return this.name;
}}子类public class Student extends Person{ public Student(String name){ super(name);
} public String print(){ return getName();
}}子类中谁在调用getName()方法,是子类对象在调用吗?这里能理解成this.getName()不,而这里的this表示调用该方法的当前对象(即子类对象)。而这里的getName()方法继承了父类的方法,那么该方法中this.name中的this,又表示的哪个对象呢?麻烦了。
1 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
java
中的多态是通过invokevirtual
指令实现的,他的调用过程可以分为以下几步:
先从操作栈中找到对象的实际类型 class;
找到 class 中与被调用方法签名相同的方法,如果有访问权限就返回这个方法的直接引用,如果没有访问权限就报错
java.lang.IllegalAccessError ;如果第 2 步找不到相符的方法,就去搜索 class 的父类,按照继承关系自下而上依次执行第 2 步的操作;
如果第 3 步找不到相符的方法,就报错 java.lang.AbstractMethodError ;
很明显你这里并没有继承父类的方法,所以这里调用父类的getName
方法。当然返回的也是父类name
属性。
如果你的子类继承了getName
方法,并且返回的是 return super.getName();
,那么你的print
方法里面调用的就是子类的getName
方法,然后再去调用父类的getName
方法(当然返回的也是父类的name属性)。
添加回答
举报
0/150
提交
取消