1.多态
2.多态访问特点
package java_learn;
/*
多态:
多态成员访问特点:
1)成员变量:编译看左边,执行看左边;
2)成员方法:编译看左边,执行看右边。
为什么不一样?--因为成员方法有重写,而成员变量没有。
*/
public class Cat extends Animal{
public int age=20;
public int weight=10;
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void playGame(){
System.out.println("猫捉迷藏");
}
}
package java_learn;
public class Animal {
public int age=40;
public void eat(){
System.out.println("动物吃东西!");
}
}
package java_learn;
/*
测试类!!!
*/
public class Demo {
public static void main(String[] args) {
//有父类引用指向子类对象
Animal a=new Cat();
System.out.println(a.age);
//System.out.println(a.weight);//父类中没有变量weight,故报错:即编译看左边(父类),执行看左边(父类,结果确实为age:40)
a.eat();
// a.playGame();//父类中也没有方法playGame(),故报错:即编译看左边,执行看右边(eat子类父类中都有,但执行结果为子类中的结果)
}
}
3.多态的好处和弊端
package java_learn;
public class Animal {
public void eat(){
System.out.println("动物吃东西!");
}
}
package java_learn;
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void playGame(){
System.out.println("猫捉迷藏");
}
}
package java_learn;
/*
动物操作类!
*/
public class AnimalOperator {
public void useAnimal(Animal a){
a.eat();
}
}
package java_learn;
/*
测试类!!!
*/
public class Demo {
public static void main(String[] args) {
//创建动物操作类对象,调用方法
AnimalOperator ao=new AnimalOperator();
Cat c=new Cat();//可以的
//Animal a=new Cat();错误
ao.useAnimal(c);
ao.playGame();//报错。不能调用子类Cat中的方法playGame,因为父类Animal中没有这个方法。
}
}