多态可以理解为事物存在的多种体现形态 多态的体现 父类的引用指向了自己的子类对象 父类的引用也可以接收自己的子类对象 多态的前提 必须是类与类之间有关系要么继承要么实现 通常还有一个前提存在覆盖 多态的好处和弊端 好处多态的出现大大的提高了程序的扩展性 弊端提高了扩展性但是只能使用父类的引用访问父类中的成员 代码演示 动物猫狗 [java] abstract class Animal { public abstract void eat() } class Cat extends Animal { public void eat() { Systemoutprintln(eat fish) } public void catchMoust() { Systemoutprintln(catch mouse) } } class Dog extends Animal { public void eat() { Systemoutprintln(eat bone) } public void lookHome() { Systemoutprintln(look home) } } class Pig extends Animal { public void eat() { Systemoutprintln(si liao) } public void gongDi() { Systemoutprintln(gong di) } } class DuoTaiDemo { public static void main(String[] args) { /* Cat c = new Cat() Cat c = new Cat() Pig p = new Pig() function(c) function(new Dog()) function(p) */ //Animal c = new Cat() //ceat() //function(new Cat()) //function(new Dog()) //function(new Pig()) Animal a = new Cat()//类型提升向上转型 aeat() //如果想要调用猫的特有方法时如何操作? //强制将父类的引用转成子类类型 Cat c = (Cat)a; ccatchMouse() //千万不要出现这样的操作将父类对象转成子类类型 //我们能转换的是父类引用指向了自己的子类对象时该应用可以提升也可以被强制转换 //多态自始至终都是子类对象在这这变化 //Animal a = new Animal() //Cat c = (Cat)a; >is error } public static void function(Animal a) { aeat() if(a instanceof Cat) { Cat c = (Cat)a; ccatchMouse() }else if(a instanceof Dog) { Dog d = (Dog)a; dlookHome() } } /* public static void function(Cat c) { ceat() } public static void function(Dog d) { deat() } public static void function(Pig p) { peat() } */ } |