黑马程序员-java多态

黑马程序员-java多态

ID:43313176

大小:230.88 KB

页数:6页

时间:2019-09-30

黑马程序员-java多态_第1页
黑马程序员-java多态_第2页
黑马程序员-java多态_第3页
黑马程序员-java多态_第4页
黑马程序员-java多态_第5页
资源描述:

《黑马程序员-java多态》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、面向对象编程有三个特征,即封装、继承和多态.封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护数据。继承是为了重用父类代码,同时为实现多态性做准备。下面我们介绍多态。多态的体现:父类型的引用可以指向子类型的对象。女口,[java]viewplaincopyC11.Parentp=newChild();//Child类继承TParent类多态的好处:大大提高程序的扩展性。因为javaH允许单继承,这样虽然保证了继承关系的简单明了,但也势必在功能上有很大的限制。多态的引入用于弥补这点不足,另外,抽

2、象类和接口也是解决单继承规定限制的重要手段。多态的弊端:虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。下面用例子來讲解多态中几个重要的概念例仁[java]viewplaincopyC1.publicclassPolyDemo2.{3・publicstaticvoidmain(String[]args)4.{5.6.Animalal=newCat();//自动向上类型转换7.Animala2=newDog();8.//调用子父类共有方法9.al.eat();//动态绑定10-a2.eat();11.〃调用子类特有方法

3、12.//al.catchMouse();//错误,父类中没有catchMouse()方法13-Catc=(Cat)al;〃强制向下类型转换14.Dogd=(Dog)a2;15-c.catchMouse();16.d.guardHouse();17.18.//Animala3=newanimal();19.//Catc2=(Cat)a3;〃错误,不能将父类对象转成子类类型20・}21.}22.classAnimal23.{24.publicvoideat()25-26-27.System•out•printIn("Animal

4、}iseating!”);28.29.30-}classDogextendsAnimal{31-publicvoideat()32.33.34.35・System•out•printIn(“Dog}publicvoidguardHouse()eating!");//Dog类重写了eat()方法//Dog类特有的方法36.37.38.System•out•printIn("Dog}ISguardinghouse!H);39.40.}classCatextendsAnimal41.42.publicvoideat()43.44.4

5、5•46.System.out•println("Cat}publicvoidcatchMouse()■ISeating!");47.48.49.System.out.print1n(”Cat}■IScatchingmouse!91);50.输出结杲:[java]viewplaincop1.Cat■IS2.Dog•IS3Cat■IS4.Dog■ISeating!eating!catchingmouse!guardinghouse!由此例,我们讲解以下儿个概念:1、类型转换1)自动向上类型转换(Upcast):将子类型转为父类型

6、对于向上的类型转换,不需要显示指定转换类型,类型自动提升。2)强制向下类型转换(Downcast):将父类型转化为子类型対于向下的类型转换,必须要显示指定转换类型,即必须使用强制类型转换。注意:由上例可知,我们能转换的是父类引用指向子类对象时,该引用既可以被提升,也可以被强制转换。多态自始至终都是子类对象在做着变化。2、多态时成员的特点1)成员函数:当父类引用指向子类对象时,该引用变量可以调用子父类共有的成员方法,而不能调用子类中定义但父类中没有的成员方法(否则会编译失败)。同时,对于父类中定义的成员方法,如果子类重写了该方法

7、,那么父类引用将会调用子类中的该方法,而这就是动态绑定。简单总结:成员方法在多态调用时,编译时期参阅引用变量所属类屮是否有调用的方法,如果有则通过,否则编译失败;在运行时期参阅被引用对象所属的类中的成员方法。2)成员变量:无论编译时期还是运行时期,都参阅引用变量所属类中的成员变量。3)静态成员方法:无论编译时期还是运行时期,都参阅引用变量所属类中的静态成员方法。下而我们再來看一个例子,以便更好的理解java的名态性例2:[java]viewplaincopyC1.classPolyDemo2・{3・publicstaticvo

8、idmain(String[]args)4.{5.6・Aal=newA();Aa2=newB();7・Bb=newB();8.Cc=newC();9.Dd=newD();10.System.out•pr•show(b));11.System.out.println(al.sh

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。