【我的Java笔记】多态

来源:互联网 发布:php 免费云空间 编辑:程序博客网 时间:2024/06/07 14:09

多态


1.概念:一个事物在不同时刻体现出的不同状态
2.多态的三个前提条件:
(1)必须存在继承关系
(2)必须有方法重写(子类出现了父类一样的方法声明)
(3)有父类引用指向子类对象(向上转型
例:Fuf = newZi ( ) ;
注:多态的三个条件缺一补不可!
3.多态的成员访问特点:
(1)成员变量:编译看左,运行看左
(2)成员方法(非静态):编译看左,运行看右
注:由于存在方法重写,故运行的是子类的成员方法
(3)成员方法(静态static):编译看左,运行看左
注:静态方法算不上方法重写,静态方法直接跟类有关!!!
(4)构造方法:还是对象进行初始化,由于是一种继承关系,还是分层初始化
例1:
class Fu{public int num = 10 ;//父类的成员方法public void show(){System.out.println("show Fu...");}//静态方法public static void function(){System.out.println("function Fu....");}}//子类class Zi extends Fu{int num = 20 ;public void show(){System.out.println("show Zi...");}public static void function(){System.out.println("function Zi....");}}//测试类public class DuoTaiDemo {public static void main(String[] args) {//创建父类的对象:多态的形式//有父类引用指向子类对象:向上转型Fu f = new Zi() ;//访问成变量System.out.println(f.num);//调用成员方法:show()f.show() ;//静态方法f.function() ;}}
结果:10
    show Zi...
    function Fu...

4.多态的特点(好处):
(1)提高了代码的维护性(继承保证)
(2)提高了代码的扩展性(多态保证)

5.多态的局限性(弊端):
(1)不能访问子类的特有方法
解决方法:创建子类具体对象(问题:会产生内存溢出现象)
(2)父类的引用强制转换为子类的引用(向下转型)
注:向下转型必须依赖于向上转型
例:Animal a = new Cat ( );//向上转型
Cat c = (Cat) a;//向下转型
c.palyGame( );
















2017.10.21