多态性

来源:互联网 发布:旋风十一人网络更新 编辑:程序博客网 时间:2024/06/07 07:56

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

比如:人:男人,女人

动物:猫,狗。

猫 x = new ();

动物 x = new ();

猫既是猫类型,又是动物类型。

多态的体现:父类的引用可以接收自己的子类对象

多态的前提:必须是类与类之间有关系(继承或实现);

通常还存在覆盖

多态的好处:大大提高了程序的扩展性

多态的弊端:只能使用父类的引用访问父类的成员

多态的应用:

abstract class Animal{abstract void eat();}class contralAnimal//把方法封装{public void function(Animal a){a.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("看家");}}public class DuoTaiDemo {public static void main(String args[]){Animal a = new Cat();//类型提升     向上转型a.eat();function(new Cat());// Animal a = new Cat();//上条语句等同于contralAnimal ca = new contralAnimal();ca.function(new Cat());//如果想要调用猫的特有方法时,需强制将父类的引用转成子类类型Cat c = (Cat)a;//向下转型c.catchMouse();//千万不要将父类对象转换成子类类型//能转换的是父类引用指向自己的子类对象时,该引用可以被提升,也可以被强制转换//多态自始至终都是子类对象在做着变化}public static void function(Animal a)//体现了多态性   {a.eat();}}

判断引用是否是某一类型:instanceof

If(a instaceof Cat){Cat c = (Cat) a;c.catMouse();}

多态的出现代码中的特点:

class Fu{static int num = 5;void method1(){System.out.println("Fu method1");}void method2(){System.out.println("Fu method2");}static void method4(){System.out.println("Fu method4");}}class Zi extends Fu{static int num = 6;void method1(){System.out.println("Zi method1");}void method3(){System.out.println("Zi method3");}static void method4(){System.out.println("Zi method4");}}public class DuoTaiDemo{public static void main(String args[]){Fu fu = new Zi();fu.method1();fu.method2();//fu.method3();//编译错误,编译时还没有产生对象,Fu类中没有method3方法Zi z= new Zi();z.method1();z.method2();z.method3();/*在多态中成员函数(非静态)的特点:在编译时期:参与引用型变量所属类中是否有调用的方法,如果有,编译通过,没有编译失败。在运行时期:参与对象所属的类中是否有调用的方法。总结:成员函数在多态调用时,编译看左边,运行看右边*//*在多态中,成员变量的特点:无论编译和运行,都参考左边(引用型变量所属的类*/Fu f = new Zi();System.out.println(f.num);//输出结果为:5/*在多态中,静态成员函数的特点:无论编译和运行,都参考左边*/f.method4();//运行结果为:Fu method4}}
0 0
原创粉丝点击