java引用变量有2个类型,一个是编译时类型,一个是运行时类型:
如果编译时类型和运行时类型不同,就出现多态。相同类型的变量,调用同一个方法时呈现出多种不同的行为特征,这就是多态。
一、方法才具有多态性,实例变量不具有。
二、当使用多态方式调用方法时,首先检查父类中是否有该方法,如果有,且子类方法覆盖了父类方法,那么去调用子类的同名方法,如果未覆盖则直接调用父类方法。如果没有,则编译错误。
public class BaseClass {
public int book = 6;
public void base()
{
System.out.println("父类的普通方法。");
}
public void test()
{
System.out.println("父类要被覆盖的方法。");
}
public class SubClass extends BaseClass{
public String book = "轻量级企业应战实例。";
public void test()
{
System.out.println("覆盖父类的方法。");
}
public void sub()
{
System.out.println("子类的普通方法。");
}
public static void main(String[] args) {
BaseClass c = new SubClass();//多态
System.out.println(c.book);//实例变量没有多态现象,所以book是父类的
c.base();//先检查base test sub 方法父类中有没有,sub没有,所以错误。
c.test();//bse test有,base直接调用,test被子类覆盖,所以调用子类test方法。
//c.sub();
}
}
}