当前位置:  开发笔记 > 编程语言 > 正文

为什么要避免使用final关键字

如何解决《为什么要避免使用final关键字》经验,为你挑选了3个好方法。

在java中,是否有允许扩展非抽象类的情况?

当存在类层次结构时,它似乎总是表示错误的代码.你同意吗,为什么/为什么不呢?



1> Jon Skeet..:

有时候有非最终的具体课程是有道理的.但是,我同意Kent的观点 - 我认为默认情况下类应该是final(密封在C#中),并且默认情况下Java方法应该是final的(因为它们在C#中).

正如Kent所说,继承需要仔细的设计和文档 - 很容易认为你可以覆盖单个方法,但不知道可以从基类调用该方法作为其余实现的一部分的情况.

有关此内容的更多讨论,请参阅"如何设计继承类".



2> Konrad Rudol..:

我同意Jon和Kent,但是像Scott Myers一样(在Effective C++中),我更进一步.我相信每个班级都应该是abstract,或者final.也就是说,只有任何层次结构中的叶类才真正适合直接实例化.所有其他类(即继承中的内部节点)都是"未完成的",因此应该是abstract.

通常的课程进一步扩展是没有意义的.如果类的一个方面值得扩展和/或修改,那么更简洁的方法是获取一个类并将其分成一个abstract基类和一个具体的可互换实现.


关于软件开发的所有绝对陈述至少有点不对.当然包括我刚写的那个.
换句话说 - 在某些情况下,它可能值得违反,但只有在您仔细考虑替代方案时才会这样.

3> Kent Boogaar..:

这个问题同样适用于其他平台,例如C#.NET.有些人(包括我自己)认为类型应该是默认的最终/密封,需要明确地启封以允许继承.

通过继承扩展是需要仔细设计的东西,并不像仅仅保留未密封的类型那么简单.因此,我认为应该是允许继承的明确决定.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有