多态性是指允许不同类型的对象对同一消息做出相应。具有灵活性、抽象、行为共享、代码共享的优势,共享就意味着最大化利用和简洁,还有就是加载速度。
一、多态的作用
消除类型之间的耦合关系。即同一事件发生在不同的对象上会产生不同的结果。
二、多态的实现形式
1.重载(发生在同一个类中)
2.覆盖(发生在子类中)
三、多态的好处
1.可替换性
2.可扩展性
3.接口性(多态是超累通过方法签名,向子类提供了一个共同的接口)
4.简洁性
5.灵活性
注意:这些好处说起来比较虚,只有你真正应用的时候才能体会得到。
四、多态存在的三个前提
1.要有继承关系
2.子类要重写父类的方法
3.父类引用指向子类对象
代码举例说明:定义一个父类Animal,一个子类Dog
1 //父类——Animal 2 public class Animal { 3 int num = 44; 4 static int age = 2; 5 6 public void eat() { 7 System.out.println("动物都需要吃东西"); 8 } 9 10 public static void sleep() {11 System.out.println("动物需要睡觉");12 }13 14 public void run() {15 System.out.println("长腿的动物爱奔跑");16 }17 }
1 //子类——Dog 2 public class Dog extends Animal { 3 int num = 5; 4 static int age = 5; 5 String name = "Tom"; 6 7 public void eat() { 8 System.out.println("我爱吃狗粮"); 9 }10 11 public static void sleep() {12 System.out.println("我是一只不爱睡觉的活泼狗狗");13 }14 15 public void catchMouse() {16 System.out.println("我喜欢多管闲事");17 }18 19 }
1 //测试类 2 public class Demo_Test { 3 public static void main(String[] args) { 4 Animal a = new Dog(); 5 a.eat(); 6 a.sleep(); 7 a.run(); 8 9 System.out.println(a.num);10 System.out.println(a.age);11 }12 }
注意事项演示:
从上面的打印结果(7),我们可以得出:
1)成员变量:打印父类,子类没有出来;
2)成员方法:父类为静态的就打印父类,非静态的直接打印子类;
3)在左侧5、6中有报错,是因为我们在调用静态成员时使用的方法不对。(下面会截图演示正确的)
4)当调用父类里没有的方法时(a.catchMouse();),会报错。)
此时,多态不能使用自己特有的属性和方法,这是多态的弊端,那要如何解决呢?
答案:把这个父类引用指向子类对象a,再强制变回Dog类型。这样a就是Dog类型的引用了,指向的也是Dog对象了。