父类
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,又表示的哪个对象呢?麻烦了。
java
中的多态是通过invokevirtual
指令实现的,他的调用过程可以分为以下几步:java.lang.IllegalAccessError ;
很明显你这里并没有继承父类的方法,所以这里调用父类的
getName
方法。当然返回的也是父类name
属性。如果你的子类继承了
getName
方法,并且返回的是return super.getName();
,那么你的print
方法里面调用的就是子类的getName
方法,然后再去调用父类的getName
方法(当然返回的也是父类的name属性)。