多态
什么是多态
多态就是向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。也就是说,每个对象可以用自己的方式去响应共同的消息。使用相同的代码实现不同的动作,体现了面向对象编程的优越性。
在C++中,多态就是利用基类指针指向子类实例,通过基类指针调用子类(虚)函数从而实现“一个接口,多种形态”的效果。
【多态分为两种】
1、编译时多态:主要通过函数的重载和模板来实现。
2、运行时多态:主要通过虚函数来实现。
1.多态的体现
父类的引用指向自己的子类对象;
父类的引用也可以接收自己的子类对象。
2.多态的前提
必须是类与类之间的关系,要么是继承(extends),要么是实现(implements),通常还有一个前提,就是存在覆盖(重写)。
3.多态的好处
多态的出现大大的提高了程序的可扩展性。但是只能使用父类的引用,访问父类的成员。
4.类型转换(向上转型,向下转型)
1 2 3 4 5 6 7 8 9 10 11 12 13
| Anmial a=new Cat(); Cat c=(Cat)a;
|
5.多态的应用
instanceof——-一般用于子类的类型有限,当传的类型需要进行其他操作时,必须要确定它的类型,即用到它的特有方法,这时用instaceof进行比较。
多态示例一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| abstract class Animal{ public 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(){ System.out.println("狗吃骨头"); } public void kanJia(){ System.out.println("狗看家"); } } class duotaiDemo{ public static void main(String[] args) { funcation(new Dog()); funcation(new Cat()); public static void funcation(Animal a) { a.eat(); if(a instanceof Cat) { Cat c=(Cat)a; c.catchMouse(); }else if(a instanceof Dog){ Dog d=(Dog)a; d.kanJia(); } } } }
|
输出结果为:
狗吃骨头
狗看家
猫吃鱼
猫抓老鼠