多态性是指同一个操作作用于某一个对象时可以有不同的解释,产生不同的执行结果。
多态存在的三个必要条件:
多态通过分离做什么和怎么做从一个角度实现了接口和实现进行分离,消除了类型之间耦合关系,提高了程序的拓展性和后期维护性。
示例
class Animal{ public String name; public void eat(){} } class Dog extends Animal{ public void eat(){ System.out.println("狗吃奥利给"); } } class Cat extends Animal{ public void eat(){ System.out.println("猫吃小老鼠"); } } public class Test { public static void main(String[] args) { Animal dog = new Dog(); Animal cat = new Cat(); dog.eat(); cat.eat(); } }
输出
狗吃奥利给 猫吃小老鼠
跟向上转型相反的过程,将已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型
强转是有风险的,我们使用instanceof关键字来判断左边的对象是否为右边的类的实例
示例
class Animal{ public String name; public void eat(){} } class Dog extends Animal{ public void eat(){ System.out.println("狗吃奥利给"); } } class Cat extends Animal{ public void eat(){ System.out.println("猫吃小老鼠"); } } public class Test { public static void main(String[] args) { Animal dog = new Dog(); Animal cat = new Cat(); dog.eat(); if(cat instanceof Cat){ Cat mimi =(Cat)cat; mimi.eat(); }else{ System.out.println("cat不是Cat的对象"); } } }
输出
狗吃奥利给 猫吃小老鼠
代码
class School{ private Printer type; public void anZhuang(Printer type){ this.type = type; } public void print(String contex){ type.print(contex); } } class Printer{ public String type; public void print(String contex){} } class ColorPrinter extends Printer{ public void print(String contex){ System.out.println("彩色打印机打印:" + contex); } } class BawDayin extends Printer{ public void print(String contex){ System.out.println("黑白打印机打印:" + contex); } } class PinDayin extends Printer{ public void print(String contex){ System.out.println("针打印机打印:" + contex); } } public class Printor { public static void main(String[] args) { School s = new School(); ColorPrinter c = new ColorPrinter(); s.anZhuang(c); s.print("花花世界迷人眼,没有颜值别赛脸"); BawDayin b = new BawDayin(); s.anZhuang(b); s.print("刀不锋利马太瘦,你拿什么和我斗"); PinDayin p = new PinDayin(); s.anZhuang(p); s.print("辉煌岁月人人有,别把一刻当永久"); } }
输出
彩色打印机打印:花花世界迷人眼,没有颜值别赛脸 黑白打印机打印:刀不锋利马太瘦,你拿什么和我斗 针打印机打印:辉煌岁月人人有,别把一刻当永久
❤️ 本回完!❤️ ❤️ ❤️