多态
来源:互联网 发布:域名注册通讯地址 编辑:程序博客网 时间: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 子类(实现)名