多态
多态前提
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("看家");
}
}