java 多态

多态的理解:

  1. 多态是同一个行为具有多个不同表现形式或形态的能力。
  2. 多态就是同一个接口,使用不同的实例而执行不同操作。
  3. 多态性是对象多种表现形式的体现。

 多态的优点:

  1.消除类型之间的耦合关系

  2.可替换性

  3.可扩充性

  4.接口性

  5.灵活性

  6.简化性

 多态存在的三个必要条件

  1.继承

  2.重写

  3.父类引用指向子类对象

 

1.多态概述

    多态是继封装、继承之后,面向对象的第三大特性。

    多态现实意义理解:

    现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。                                                                                                            

    Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。

     3.多态体现为父类引用变量可以指向子类对象。

     4.前提条件:必须有子父类关系。

    注意:在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

     5.多态的定义与使用格式

                   定义格式:父类类型 变量名=new 子类类型();

原文链接:https://blog.csdn.net/qq_41679818/article/details/90523285

 

  比如

  

1 Parent p = new Child();

 当使用多态方式调用方法是,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

 

复制代码
 1 package com.poly.www;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5         show(new Cat()); // 以 Cat 对象调用 show 方法
 6         show(new Dog()); // 以 Dog 对象调用 show 方法
 7 
 8         Animal a = new Cat(); // 向上转型
 9         a.eat(); // 调用的是 Cat 的 eat
10         Cat c = (Cat) a; // 向下转型
11         c.work(); // 调用的是 Cat 的 work
12     }
13 
14     public static void show(Animal a) {
15         a.eat();
16         // 类型判断
17         if (a instanceof Cat) { // 猫做的事情
18             Cat c = (Cat) a;
19             c.work();
20         } else if (a instanceof Dog) { // 狗做的事情
21             Dog c = (Dog) a;
22             c.work();
23         }
24     }
25 }
26 
27 abstract class Animal {
28     abstract void eat();
29 }
30 
31 class Cat extends Animal {
32     public void eat() {
33         System.out.println("吃鱼");
34     }
35 
36     public void work() {
37         System.out.println("抓老鼠");
38     }
39 }
40 
41 class Dog extends Animal {
42     public void eat() {
43         System.out.println("吃骨头");
44     }
45 
46     public void work() {
47         System.out.println("看家");
48     }
49 }
复制代码

执行以上程序,输出结果:

复制代码
吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠
复制代码

多态的实现方式

  1. 重写
  2. 接口
  3. 抽象和抽象方法
posted @ 2020-03-11 18:02  kissrule  阅读(244)  评论(0编辑  收藏  举报