小弟新写的一个类
class Base
{
protected String name()
{
return"base";
}
}public class Son extends Base
{
protected String name()
{
return "son";
} protected void printName()
{
Base ref =(Base)this;
System.out.println("this.name is "+this.name());//son
System.out.println("ref.name is "+ref.name()); //base
System.out.println("Super.name is "+super.name());//base
}
public static void main(String[] args)
{
Son s = new Son();
s.printName();
}}我以为输出结果是son,base,base,但是运行的输出结果却是son,son,base请大家帮我解答一下第二项为什么不是base,
我认为Base ref =(Base)this;已经获得ref为Base类的引用,但为什么没有调用Base类的name方法,请教
class Base
{
protected String name()
{
return"base";
}
}public class Son extends Base
{
protected String name()
{
return "son";
} protected void printName()
{
Base ref =(Base)this;
System.out.println("this.name is "+this.name());//son
System.out.println("ref.name is "+ref.name()); //base
System.out.println("Super.name is "+super.name());//base
}
public static void main(String[] args)
{
Son s = new Son();
s.printName();
}}我以为输出结果是son,base,base,但是运行的输出结果却是son,son,base请大家帮我解答一下第二项为什么不是base,
我认为Base ref =(Base)this;已经获得ref为Base类的引用,但为什么没有调用Base类的name方法,请教
这个方法的调用是运行时绑定的,即根据ref实际的类型(Son)来调用name()方法
System.out.println("ref.name is "+ref.name());输出就是base!
简单点说就是
虽然ref 是Base类的引用,但this在内存中仍然是Son的对象
根据多态性,父类的引用可以指向其子类的对象,注意,是指向!