多态概述:同一个对象,不同时刻表现出来的不同形态 可以说猫是猫 猫 cat=new 猫; 可以说猫是动物 动物 animal-new 猫; 多态前提和体现: 1.有继承/实现关系 2.有方法重写 3.有父类引用指向子类对象 多态的弊端:不能使用子类特有的功能
/*
多态概述:同一个对象,不同时刻表现出来的不同形态
可以说猫是猫 猫 cat=new 猫;
可以说猫是动物 动物 animal-new 猫;
多态前提和体现:
1.有继承/实现关系
2.有方法重写
3.有父类引用指向子类对象
多态的弊端:不能使用子类特有的功能
*/
public class Animal {
public int age =40;
public void eat() {
System.out.println("动物吃东西");
}
}
public class Cat extends Animal{
public int age=20;
public int weight=1;
@Override
public void eat() {
System.out.println("猫吃鱼");
}
/*
@Override
public void playgame() { //子类特有
System.out.println("猫捉迷藏");
}
*/
}
public class AnimalDemo {
public static void main(String[] args) {
//父类引用指向子类对象
Animal z=new Cat();
System.out.println(z.age);
z.eat();
}
}
--------------------------------------------------------------------
多态.成员访问特点:
成员变量: 编译看左边,执行看左边 成员方法: 编译看左边,执行看右边 (成员方法有重写所致)
public class Animal {
public void eat(){
System.out.println("动物吃东西");
}
}
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃骨头");
}
public void lookDoor(){
System.out.println("狗看门");
}
}
public class AnimalOperator {
/*
public void useAnimal(Cat c){ //Cat c = new Cat();
c.eat();
}
public void useAnimal(Dog d){ //Dog d = new Dog();
d.eat();
}
*/
public void useAnimal(Animal a){
a.eat();
// a.lookDoor();
}
}
public class AnimalDemo {
public static void main(String[] args) {
AnimalOperator ao = new AnimalOperator();
Cat c = new Cat();
ao.useAnimal(c);
Dog d = new Dog();
ao.useAnimal(d);
}
}
希望大家批评指正
谢谢大家