博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Java编程思想》之多态(面向对象程序语言的第三基本特征)
阅读量:5152 次
发布时间:2019-06-13

本文共 2095 字,大约阅读时间需要 6 分钟。

1.在面向对象的程序设计语言中,多态是继承数据抽象继承之后的第三基本特征。

2.“封装”通过合并特征和行为来创建新的数据类型。

3.“实现隐藏”则通过将细节“私有化”,把接口和实现分离开来。

4.多态的作用则是消除类型之间的耦合关系。

5.耦合就是指两个或两个以上的实体相互依赖于对方的一个量度。

6.多态也称作动态绑定、后期绑定或运行时绑定。

7.将一个方法调用同一个方法主体关联起来被称作“绑定”。

8.“前期绑定”:程序执行前进行的绑定,由编译器和连接程序实现。面向对象的语言不需要选择就默认的绑定方式。

9.Java中除了static方法和final方法(private方法属于final方法)之外,其它所有方法都是后期绑定。

10.为什么要将某个方法声明为final呢?

(1)它可以防止其它人覆盖该方法。

(2)也是更为重要的一点。这样做可以有效地“关闭”动态绑定,或者说,告诉编译器不需要对其进行动态绑定。这样,编译器就可以为final方法调用生成更有效的代码。然而,大多数情况下,这样做对程序的整体性能不会有什么改观。所以,最好根据设计来决定是否使用final,而不是出于试图提高性能的目的来使用final。

11.多态的一个简单的例子:

class Shape{ void draw(){ System.out.println("shape draw()"); } void erase(){ System.out.println("shape erase()"); } } class Circle extends Shape{ void draw(){ System.out.println("Circle draw()"); } void erase(){ System.out.println("Circle erase()"); } } class Square extends Shape{ void draw(){ System.out.println("Square draw()"); } void erase(){ System.out.println("Square erase()"); } } public class Shapes{ public static void main(String[] args){ Shape shape = new Circle(); shape.draw(); Shape shape1 = new Square(); shape1.draw(); } }

运行结果:

由于多态(后期绑定),还是正确调用了Circle draw()和Square draw()。

12.Java中的“抽象方法”相当C++语言中的纯虚函数。

13.构造函数并不具有多态行(它们实际上是static方法,只不过该static声明是隐式的)。

14.在构造函数内部调用一个动态绑定的方法,那么被调用的方法所操纵的成员可能还未初始化(可能造成一些难以发现的隐含的错误)。如下例子:

class Glyph{ void draw(){ System.out.println("Glyph().draw()"); }; Glyph(){ System.out.println("Glyph()before draw()"); draw();//由于动态绑定,调用的是RoundGlyph的draw() System.out.println("Glyph()after draw()"); } } class RoundGlyph extends Glyph{ private int radius = 1; RoundGlyph(int r){ radius = r; System.out.println("RoundGlyph.RoundGlyph()radius = " + radius); } void draw() { //注意以下输出的是RoundGlyph.draw() radius = 0 System.out.println("RoundGlyph.draw()radius = " + radius); } } public class PolyConstructors{ public static void main(String[] args){ new RoundGlyph(5); } }

运行结果:

15.复杂对象的初始化过程:

1)在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的

2)调用基类构造函数,一个反复递归,直至最低层的基类。

3)按照声明的顺序调用成员的初始化方法。

4)调用导出类的构造函数

16.如果不是后期绑定,就不是多态。如方法重载,它是属于非面向对象的特性。

以上内容整理自《Java编程思想》,如有遗漏,请您不吝指出!

转载于:https://www.cnblogs.com/myittec/archive/2012/01/26/2392772.html

你可能感兴趣的文章
Program exited with code **** 相关解释
查看>>
装服务器,测试数据库,简单的maven命令
查看>>
升级Firefox8后watir-webdriver出现错误“unable to obtain stable firefox connection in 60 seconds”...
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
001.RAID简介
查看>>
投标项目的脚本练习2
查看>>
第五次实验
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
runtime的基本应用
查看>>
关于scrollTop的那些事
查看>>
Caroline--chochukmo
查看>>
算法导论笔记 第8章 线性时间排序
查看>>
利用jquery的contains实现搜索功能
查看>>
Xcode 6.2 beta 3 太难下载!下载了,不敢独享
查看>>
并发编程
查看>>
Bootstrap
查看>>
C语言错误: HEAP CORRUPTION DETECTED
查看>>
【Java基础】Java类的加载和对象创建流程的详细分析
查看>>
2018-2019-1 20165231《信息安全系统设计基础》第二周学习总结
查看>>