面向对象-day03

219 阅读1分钟

多态

多态前提

a:要有继承关系。

b:要有方法重写。

c:要有父类引用指向子类对象。

多态-成员变量

编译看左边(父类),运行看左边(子类)。

多态-成员方法

编译看左边(父类),运行看右边(子类)。

多态-静态方法

静态方法

编译看左边(父类),运行看左边(父类)。

静态和类相关,算不上重写,所以,访问还是左边的

只有非静态的成员方法,编译看左边,运行看右边

多态中向上转型和向下转型

Person p = new SuperMan();向上转型

SuperMan sm = (SuperMan)p;向下转型

/*
写一个代码来验证多态成员变量,成员方法,静态方法的使用情况,并使用向下转型
*/

class Demo_Play {
    public static void main(String[] args) {
        Animal a=new Cat();                //猫指向动物
        System.out.println(age);           //输出年龄 5
        a.eat();                           //猫吃饭
        Cat c=(Cat)a;                      //向下转型
        c.catchMouse();                    //抓老鼠
        System.out.println();              //输出空白行,用于分割
        Animal a0=new Dog();               //狗指向动物
        System.out.println(age);           //输出年龄 10
        a0.eat();                          //静态,吃饭
        Dog d=(Dog)a0;                      //向下转型
        d.lookHouse();                     //看家
    }
}
class Animal {
    int age=10;                              //成员变量
    public void eat() {                      //吃饭
        System.out.println("吃饭");
    } 
} 
class Cat extends Animal{                  //继承
    int age=5;                             //猫的成员变量
    public void eat() {                    //猫吃饭 
        System.out.println("猫吃饭");
    } 
    public void catchMouse() {             //抓老鼠
        System.out.println("抓老鼠");
    } 
}
class static Dog extends Animal{                 //继承
    public void eat() {                   //狗吃饭
        System.out.println("狗吃饭");
    } 
    public void lookHouse() {             //看家
        System.out.println("看家");
    } 
}