校园网站策划书,重庆seo整站优化系统,城乡建设网站证件查询,合肥网站建设公司加盟多态#xff08;Polymorphism#xff09;按字面的意思就是“多种状态”。在面向对象语言中#xff0c;接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术#xff0c;赋值之后#…多态Polymorphism按字面的意思就是“多种状态”。在面向对象语言中接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术赋值之后父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作摘自“Delphi4 编程技术内幕”。简单的说就是一句话允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C中都是通过虚函数实现的。
Java 的多态实现有以下几个条件
继承重写父类引用指向子类对象
当使用多态方式调用方法时首先检查父类中是否有该方法如果没有则编译错误如果有再去调用子类的同名方法。
多态的好处可以使程序有良好的扩展并可以对所有类的对象进行通用处理
public class polymorphicTEST {public static void main(String[] args) {show(new Cat()); // 以 Cat 对象调用 show 方法show(new Dog()); // 以 Dog 对象调用 show 方法Animal a new Cat(); // 向上转型 a.eat(); // 调用的是 Cat 的 eatCat c (Cat)a; // 向下转型 c.work(); // 调用的是 Cat 的 work} public static void show(Animal a) {a.eat(); // 类型判断if (a instanceof Cat) { // 猫做的事情 Cat c (Cat)a; c.work(); } else if (a instanceof Dog) { // 狗做的事情 Dog c (Dog)a; c.work(); } }
}abstract class Animal { abstract void eat(); //不能具体化
} class Cat extends Animal { public void eat() { System.out.println(吃鱼); } public void work() { System.out.println(抓老鼠); }
} class Dog extends Animal { public void eat() { System.out.println(吃骨头); } public void work() { System.out.println(看家); }
}仔细观察可以看到它首先在主方法中把show的两种调用方法写好了之后的向上转型把子类型的范围扩大
底下由abstract修饰的方法叫抽象方法由abstract修饰的类叫抽象类。抽象的类无法进行实例化因为他不是具体存在的类或者说这样的类还不够完善不能直接使用new关键字调用其构造器生成该类的对象。
eat是猫与狗都具有的行为底下的多态继承
程序的输出结果如下