为什么Java中的Number类不是接口而不是Abstract类?

桑迪皮

我知道byteValue()和shortValue()具有与其他抽象方法不同的实现,并且是在JDK1.1中添加的。如果它是接口,则不可能实现。但是,当开发人员编写Number类时,为什么要使其成为抽象类呢?仅仅是因为他们期望以后会添加更多方法吗?我只需要权威引用所支持的答案非常感谢大家花时间审核我的问题并给出答案。

约翰16384

这里没有人会知道设计师的想法,但是抽象类和接口用于不同的目的。

(在Java中)类在严格的层次结构中继承,并且此层次结构是可用于确保分离不相关的对象类的工具。当整个层次结构的核心功能相似时,类也更具逻辑性。

例如,对于抽象类NumberLetter不可能同时具有两者。使用接口,可以创建一个实现这两个都没有意义的类。

另一方面,接口通常用于以正式方式公开类的(通常是)一小部分,因此它们可被仅使用接口中指定功能的可重用逻辑使用。他们更经常用于添加辅助功能,比如SerializableComparable或者Runnable

一个示例,Printable并且Comparable将是可怕的抽象类,因为它将使Comparable对象也成为不可能Printable

因此,设计人员可能专门选择了Number一个抽象类,以确保只有一个类层次结构可以是数字,而不能有其他任何东西。也许它可以允许将来的优化,如JDK那样,JDK将这些类视为特殊情况String

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么选择接口而不是常规类

为什么FileReader不是NetBeans中的类?

为什么使用默认接口方法而不是类字段?

为什么必须在类而不是接口中定义方法?

为什么要使用空的抽象类而不是接口?

为什么要使用抽象类而不是接口?

为什么实现接口的类中的泛型成员函数不能采用类(而不是接口)类型的参数?

为什么“ this”指向类而不是类对象?

类不是Abstract吗?

为什么派生自Comparer <T>类而不是实现IComparer <T>接口的实现类?

为什么ASP.NET Core的Startup类不是接口或抽象类?

为什么我必须在实现类而不是仅接口类上使用@RequestParam批注?

为什么Java在这里期望类而不是变量?

为什么java.util.Observable不是抽象类?

为什么在类中定义的变量不是局部变量而是Java中的实例变量?

为什么ES6类中的“ this”不是隐式的?

为什么类中的属性不是只读的(Typescript)

为什么toBinaryString不是Integer类中的实例方法?

为什么value不是ArrayBuffer中的类的成员[Any]

为什么静态方法中的本地类不是静态的

为什么建议在Python中从Exception而不是BaseException类派生?

为什么从调用容器类,而不是在Java中它的实例方法

为什么使用属性文件而不是将属性作为字段放置在 java 类中?

为什么随机类不是静态的?

为什么是NSRect,NSPoint等结构而不是类?

为什么Uri是类而不是结构?

为什么.NET的Version是类而不是struct?

为什么Exception是类而不是结构?

在Java中,为什么((A)b).disp()调用派生类方法disp()而不是基类方法disp()?