问这个程序的输出结果?
package Wangyi;
class Base
{
public void method()
{
System.out.println("Base");
}
}
class Son extends Base
{
public void method()
{
System.out.println("Son");
}
public void methodB()
{
System.out.println("SonB");
}
}
public class Test01
{
public static void main(String[] args)
{
Base base = new Son();
base.method();
base.methodB();
}
}
答案:
编译不通过
解析:
Base base = new Son();
这句new 了一个派生类,赋值给基类,所以下面的操作编译器认为base对象就是Base类型的。Base类中不存在methodB()方法,所以编译不通过。
多态问题中,无论向上或向下转型,只需记住一句话:
**编译看左边,运行看右边。**意思编译时候,看左边有没有该方法,运行的时候结果看 new 的对象是谁,就调用的谁。