- 继承或实现是多态的前提。
 - 一个对象拥有多种形态,简称“对象的多态性”。
 - 方法才能覆盖重写,成员变量不可覆盖重写。
 
父类引用指向子类对象,格式:
父类名称 对象名 = new 子类名称();
或者:
接口名称 对象名 = new 实现类名称();
-  
多态访问成员变量的两种方式:
- 直接通过对象名称访问成员变量,看等号左边是谁,优先用谁,没有则向上找。
 
 
public class Demo{
    public static void main(String[] args){
        //使用多态
        Fu f = new Zi();
        //等号左边是Fu,所以显示 35.
        System.out.println(f.age);
    }
}
public class Zi extends Fu{
    int age = 10;
}
public class Fu{
    int age = 35;
} 
- 间接通过成员方法使用访问,看方法属于哪个类,则优先调用此类,没有则向上找。
 
public class Demo{
    public static void main(String[] args){
        //使用多态
        Fu f = new Zi();
        //子类没有覆盖,show()方法属于Fu, 100.
        System.out.println(f.show());
        //子类覆盖父类方法,调用子类方法, 50.
        System.out.println(f.show());
    }
}
public class Zi extends Fu{
    int age = 10;
    int num = 50;
}
public class Fu{
    int age = 35;
    int num = 100;
    public void show(){
        System.out.println(num);
    }
} 
-  
多态访问成员方法:
- 看new的是谁,优先用谁,没有则向上找。
 
 
编译看左边,运行看右边。
public static void main(String[] args){
    Fu obj = new Zi();
    obj.method();//父子都有,优先用右边。
    obj.methodFu();//子没有,向上找,用父的。
}
public class Zi extends Fu{
    public void method(){
    }
}
public class Fu{
    public void method(){
    }
    public void methodFu(){
    }
} 
编译看左,运行看右。
-  
对象的上下转型
 











