java编程思想第八章多态

前言:

  封装:通过合并特征和行为创建新的数据类型。

  实现隐藏:通过将细节“私有化”,把接口和实现分离。

  多态:消除类型间的耦合关系。也称作动态绑定,后期绑定或运行时绑定。

8.1再论向上转型:

  对象既可以作为本身的类型使用,也可以作为基类的类型使用。这种做法成为向上转型。

  其代码表现就是:父类引用指向子类。

  多态允许在参数的地方使用,即参数处声明基类,用于接受基类或导出类实现。

8.2转机(主要是介绍如何实现多态)

  为了解决多态问题,在java中提供了后期绑定的方法,即在运行时根据对象的类型进行绑定。也成为动态绑定或运行时绑定。

  注:java中除了static方法和final方法,其他方法都是后期绑定。final关键字可以关闭动态绑定。

  final关键字最好根据设计来决定是否使用。千万不能通过final来提高性能,因为并不会提升性能,而且也会让程序的设计显得混乱。

  多态可以让程序员将:改变的事物与未变的事物分离开来。

  这里再次提高了试图重写基类的private方法是一种很错误的行为。

  只有普通方法的调用是多态的,静态方法不具有多态性(实际上final也没有,而且由于private隐式指向final,所以也没有)。

8.3构造器与多态

  构造器是不具有多态的,他们本质上是static方法,只不过是隐式声明。

  前面提到过:基类的构造器总是在导出类的构造过程中被调用,且按照继承层次逐渐向上调用。

  对于复杂的继承体系:

    1)调用基类的构造器

    2)按声明顺序调用成员变量的初始化方法。

    3)调用导出类的构造器本体。

  注:继承体系中,为什么这样调用?因为在导出类中要求基类是已经存在的,且基类的一切成员(public protect)都可以访问到。

  涉及到内存方面的构造过程:

    1)将分配给对象的存储空间初始化成二进制的零。

    2)调用基类构造器。

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

    4)调用导出类的构造器主体。

  实际上构造器中,除了初始化成员外,唯一能够安全调用的方法是基类的final方法了(也适用于private方法,他们隐式为final)。

8.4协变返回类型:

  这是jdk1.5中。

  导出类的被覆盖的方法可以返回基类方法的返回类型的某种导出类型。

8.5用继承进行设计:

  实际上是表明了在继承用于设计的时候,一定要慎重,:

  继承要求在编译时就要知道确切的类型。

  用继承表达行为间的差异,并用字段表达状态上的改变。

纯继承与扩展:

  纯继承是is-a的关系:基类可以接受发送导出类的任何消息,因为二者有着完全相同的接口。我们只需要从导出类向上转型,永远不需要知道正在处理的对象的确切类型。

  实际上extends用于扩展接口,这样是一种is-like-a的关系。导出类就像一个基类,除了有着同基类相同的接口外,还有自己额外方法实现的特性。

  导出类中接口的扩展部分不能被基类访问。对于这种类型,在向上转型时的问题就在于,扩展部分不能被基类访问。

  为了解决向上转型中,无法识别扩展部分,提出了向下转型的概念。

  但是有可能出现的问题:你不知道到底要转成哪个类型。这时候就会出现运行期异常:(ClassCastException)。

  实际上在java中每一次转型都会的得到检查,称之为“运行时类型识别”(RTTI)。

  

  

  

  

原文地址:https://www.cnblogs.com/lilinzhiyu/p/8278743.html

时间: 2024-10-03 23:17:02

java编程思想第八章多态的相关文章

Java编程思想---第八章 多态(上)

第八章  多态(上) 在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征. 多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来,多态不但能改善代码的组织结构和可读性,还能够创建可扩展的程序,无论在项目最初创建时还是在需要添加新功能时都可以生长程序.封装通过合并特征和行为来创建新的数据类型. 8.1 再论向上转型 在上一章中我们已经知道,对象可以作为它本身的类型使用,也可以作为它的基类使用,而这种把对某个对象的引用视为对其基类的引用的做法被称为向上转型. //: dem

Java编程思想之8多态

这一章看下来,感觉比较混乱.乱感觉主要乱在8.4  8.5. 开始读的时候,感觉8.1 8.2 8.3都挺乱的.读了两遍后发现前三节还是比较有条理的. 8.1主要讲了什么是多态,多态的好处. 8.2主要讲了什么情况会发生多态?? 8.3主要讲了构造器内部里面的方法调用会发生多态. 8.4就一页,而且感觉一般用不到.用到了再看也行. 8.5也很简单,相当于一个总结,一个补充(向下转型) 我主要根据书上的内容,总结两个内容: 1.什么是多态,多态的好处: 2.什么情况下会发生多态?为什么这些情况下会

Java编程思想学习(六) 多态

1.Java语言的三大特性:继承.封装和多态. 继承:复用类的一种方法,可以简省很多代码: 封装:通过合并特征和行为来创建新的数据类型.[这种“数据类型”跟Java本身提供的8大“基本数据类型”的地位完全相同.Java通过封装这种方式来扩充数据类型.] 多态:消除创新的数据类型之间的耦合关系. 2.前期绑定:static和final方法都是前期绑定(在编译时绑定和执行): 3.后期绑定:Java中除了static和final方法,都是后期绑定(前面提到过,private方法属于final方法).

【Java编程思想】8.多态

在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征. 多态分离了"做什么"和"怎么做",让接口和实现分离开,改善了代码的可读性和组织结构,创建了可拓展的程序. 封装,通过合并特征和行为来创建新的数据类型. 实现隐藏,通过将细节"私有化"把接口和实现分离开来. 多态,消除类型之间的耦合联系.多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要他们都是从同一基类导出来的.-->这种区别是根据方法行为的不同而表示出来的

Java编程思想笔记(多态)

      1.再论向上转型:       1(1).忘记对象类型       2.转机:       2(1).方法调用绑定       2(2).产生正确的行为       2(3).可扩展性:多态是一项让程序员“将改变的事物与未变的事物分离开来”的重要技术.   2(4).缺陷:“覆盖”私有方法:只有非private方法才可以被覆盖:但是还需要密切注意覆盖private方法的现象,这时虽然编译器不会报错,但是也不会按照我们所期望的来执行.确切地说,在导出类中,对于基类中的private方法

Java编程思想(五) —— 多态(上)

上一章,Java编程思想(四) -- 复用类里面讲到了向上转型,感觉和多态放在一起写更好. 多态,polymorphism.一个重要的特性,篇幅太长了,分上下两篇写. (1)向上转型 class TV{ public static void show(TV tv){ System.out.println("TV"); } } public class LeTV extends TV{ public static void main(String[] args) { LeTV letv

《On Java 8》中文版,又名《Java 编程思想》中文第五版

来源:LingCoder/OnJava8 主译: LingCoder 参译: LortSir 校对:nickChenyx E-mail: [email protected] 本书原作者为 [美] Bruce Eckel,即(Thinking in Java 4th Edition,2006)的作者. 本书是事实上的 Thinking in Java 5th Edition(On Java 8,2017). Thinking in Java 4th Edition 基于 JAVA 5 版本:On

《Java编程思想(第4版)》pdf

下载地址:网盘下载 内容简介 编辑 本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形.从Java的基础语法到最高级特性(深入的面向对象概念.多线程.自动项目构建.单元测试和调试等),本书都能逐步指导你轻松掌握.[1] 从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作.本书的作者拥有多年教学经验,对C.C++以及Java语言都有独到.深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概

Java编程思想重点笔记(Java开发必看)

Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面 试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如is-a关系和has-a关系的区别),也有深入的涉及RTTI和JVM底层 反编译知识. 1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意