当前位置: 首页 > 面试题库 >

在Java中禁止继承的理由?

秦联
2023-03-14
问题内容

有什么理由禁止Java中的继承,例如通过使用最终类或使用单个私有无参数构造函数的类?将方法定型的充分理由是什么?


问题答案:

这里最好的参考是Joshua Bloch的出色著作“ Effective Java”的第19项,称为“继承的设计和文档,否则将禁止继承”。(在第二版中是第17项,在第一版中是第15项。)你应该阅读它,但我将进行总结。

如果祖先不是为了继承而来的,则继承的类与父母之间的交互可能是令人惊讶且不可预测的。

因此,类应分为两种:

  1. 设计为可扩展的类,并提供足够的文档来描述应如何完成

  2. 标记为最终课程

如果你纯粹是在编写内部代码,则可能有点过大。但是,在类文件中添加五个字符所涉及的额外工作量很小。如果你仅出于内部消耗而编写,那么将来的编码人员可以随时删除“最终”,你可以将其视为警告,指出“该类在设计时并未考虑继承性”。



 类似资料:
  • 我是新来的Java,已经参加了几个星期的课程,并被要求完成一个包含以下信息的项目: > 设计具有以下数据字段的船舶等级: > 船舶建造年份的数据字段(int)。 构造函数和适当的访问器和变异器。 显示船名和建造年份的toString方法。 设计一个CruiseShip子类,扩展船舶类。CruiseShip类应具有以下内容: > 最大乘客数的额外数据字段(int)。 构造函数和适当的访问器和变异器。

  • //为什么这是强制性的??? 当我做一个类派生从一个innerclass(Innerclass.后来我才知道,它需要包括一个构造函数采取封闭类引用为什么是这样?

  • 问题内容: 我有超类和方法。如果我在继承的子类中重写了方法,或者必须始终编写它,是否会继承? 问题答案: 不,您将总是不得不写信。如果您调用超类的同步方法,则这当然是同步调用。不是方法签名的一部分。 有关Java线程负责人(等等)的Doug Lea的详细说明,请参见http://gee.cs.oswego.edu/dl/cpj/mechanics.html。

  • 我一直在做一个基本的类继承练习,尽管我认为我已经掌握了它的jist,但我的程序并没有按应有的方式工作。我遇到了编译错误,但还没有弄清楚原因——如果你们都能在这里帮助我,那就太好了。 首先,这里有三个文件1。人java——基类2。大学生java——一个派生的Person类。java 3。家庭java——不太确定,我认为它是自己的基类 人java有两个实例变量,String name和int age,

  • 问题内容: 假设Java具有以下层次结构类: 这是C#中相同代码的(盲)重复: 当我执行Java代码时,我得到了C#返回的信息。 对我来说,C#的结果更有意义,因为引用B调用了它自己的方法。 Java设计者决定打印而不是打印的逻辑是什么?我的意思是,为什么引用B在C中使用覆盖方法?这种方法的优势是什么? 如何更改Java代码以像C#一样打印出来?我的意思是,我怎么教Java调用它使用的完全引用的方

  • 本小节我们将学习 Java 的继承,通过本小节的学习,你将知道什么是继承,继承有什么特点,如何实现继承,方法重写的概念和实现,方法重写和方法重载是比较容易混淆的概念,我们也会介绍两个概念的区别,这些都是本小节的重点,本小节的最后我们还会介绍 super 关键字以及 final 关键字。 1. 概念和特点 1.1 概念 继承是面向对象软件技术当中的一个概念。如果一个类别 B “继承自” 另一个类别