首页 > 代码库 > Java简明教程 10.多态(Polymorphism)

Java简明教程 10.多态(Polymorphism)

什么是多态(Polymorphism)?

  多态就是: 父类的引用既可以来自父类, 也可以来自子类. 也就是, 允许子类的引用赋值给父类的引用

        这就正如, 对于小牛, 它既是小牛, 也是动物; 对于汽车, 它既是汽车, 又是交通工具;对于手机, 它既是手机,又是通讯设备...这些的道理是一样的

  PolyDemo1.java

 

 1 /* 什么是多态?
 2  * 输出结果: 牛在吃.
 3  */
 4 public class PolyDemo1 {
 5     public static void main(String[] args) {
 6         Animal a1 = new Cow();
 7         a1.eat();
 8         /*a1.i = 1;     error
 9          *出错信息: PolyDemo1.java:6: 错误: 找不到符号
10          *      a1.i = 1;
11          *                ^
12          *                  符号:   变量 i
13          *                    位置: 类型为Animal的变量 a1
14          *                    1 个错误
15          *总结: 来自子类引用的父类引用, 只能访问子类从父类继承过来的属性(成员变量, 成员方法)
16          *      如果要访问子类特有的属性, 可以考虑强制转换.
17          */
18         ((Cow)a1).i = 1;        //ok
19     }   
20 }
21 
22 class Animal {
23     public void eat() {
24         System.out.println("动物在吃.");
25     }   
26 }
27 
28 
29 class Cow extends Animal {
30     public int i;
31     @Override
32     public void eat() {
33         System.out.println("牛在吃.");
34     }   
35 }

 

总结

  多态就是: 一个父类的引用既可以指向父类对象, 也可以指向子类对象.

       它可以根据时刻指向的不同, 自动调用不同对象的方法.

注意:

  1. 通过父类的引用只能访问子类从父类继承过来的成员

  2. 当父类的引用指向的其实就是一个子类对象的时候,, 才可以把父类的引用强制转换为子类的引用