多态

来源:互联网 发布:域名注册通讯地址 编辑:程序博客网 时间:2024/06/06 03:59

多态:

简单说:就是一个对象对应着不同的类型

多态在代码中的体现:

父类或者接口的引用指向子类的对象

可以理解为事物存在的多种体现形态。

1.多态的体现

父类的引用指向了自己的子类对象

父类的引用也可以接受本类对象 

2.多态的前提

必须是类与类之间有关系 要么继承要么实现

通常还有一个前提存在覆盖

3.多态的好处

提高代码的扩展性

4.多态的弊端:

必须是父类访问的是父类的成员


5  .多态的应用

狗 x = new 狗();

x.吃骨头();

狗 y = (猫)x;

y.抓耗子

在多态中成员函数的特点:

在编译时期:参阅引用型变量所属的类中是否有调用的方法 如果有 编译通过 如果没有编译失败

在运行时期:参阅对象所属的类中是否有调用的方法

简单总结就是:成员函数在多态调用时 编译看左边 运行看右边

在成员变量中:编译运行都看左边[引用型变量所属的类]

在多态中,静态成员函数的特点:

无论编译和运行都参考左边

object:是所有对象的直接后者间接的父类,传说中的上帝

该类中定义的肯定是所有对象就具备的功能

equals:指示其他某个对象是否与此对象“相等”;


多态时:

成员的特点:

1.成员变量:

编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译成功 没有 编译失败

运行时:参考引用型变量所属的类中的是否有调用的成员变量 并运行该类中所属的成员变量

简单说:编译和运行都参考等号左边

2.成员函数(非静态)

编译时:参考引用型变量所属的类中的是否有调用的函数  有 编译通过 没有 编译失败

运行时:参考的是对象所属的类中是否有调用的函数

简单说:编译看左边 运行看右边


3.静态变量:

编译时:参考引用型变量所属的类中是否有调用的静态方法

运行时:参考引用型变量所属的类中的是否有调用的静态方法

简单说:编译和运行都看左边左边 

对于静态方法 是不需要对象的 直接用类名调用即可

代码演示:

abstract class Animal{abstract void eat();}class Cat extends Animal{public void eat(){System.out.println(“吃鱼”);}public void catchMouse(){System.out.println(“”);}}class Dog extends Animal{public void eat(){}public void kanJia(){}}class DuoTaiTest{public static void main(String[] args){function(new Cat());function(new Dog());Animal a = new Cat();//向上转型a.eat();Cat c = (Cat)a;//向下转型c.catchMouse();}}public static void funciton(Animal a){a.eat();//由于子类类型有限,或者判断所属类型进而使其特有方法if(a instanceof Cat){Cat c = (Cat)a;c.catchMounse();}else if(a instanceof Dog){Dog c = (Dog)a;c.kanJia();}}

这里介绍一下instanceof关键字:

instanceof关键字
A:用于判断某个对象是否是某种类型。
B:格式
对象名 instanceof 子类(实现)名


0 0
原创粉丝点击