多态:相同类型的变量,调用同一个方法呈现出多种不同的行为特征,这就是多态。
父类引用指向子类对象才有可能产生多态。
用下面的例子进行分析。class Base
{
public int x = 10;
public void base(){
System.out.pritnln("父类的方法");
}
public void ploy(){
System.out.println("父类被子类覆盖的方法");
}
}
class Sub extends Base
{
public int x = 90;
public void sub(){
System.out.println("子类的方法");
}
public void ploy(){
System.out.ptintln("子类覆盖父类的方法");
}
}
class Test
{
public static void main(String[] args){
//编译时类型和运行时类型完全一样因此不存在多态
Base b = new Base();
//输出10
System.out.println(b.x);
//执行Base里的方法
b.base();
//执行Base里的方法
b.ploy();
//编译时类型和运行时类型完全一样因此不存在多态
Sub s = new Sub();
//输出90
System.out.println(s.x);
//调用从父类继承到的base方法。
s.base();
//执行当前类的方法
s.sub();
s.ploy();
//编译时类型和运行时类型不一样,可能发生多态
Base base = new Sub();
//输出10 -----表明访问的是父类的Field
System.out.println(base.x);
//执行从父类继承到的base方法
base.base();
//执行当前类的ploy方法
base.ploy();
//因为base的编译时类型是Base
//Base类没有提供sub方法所以下面代码编译时会出现错误
base.sub();
}
}