我只是想让自己对 java api 感到满意。但我无法做到。不知道何时使用抽象类的目的。
考虑 java 库集合
Collections
List Set
所有 3 都是接口,但最重要的是,尽管它们具有常见的功能,即 add、addAll、contains、containsAll 等。 List 以自己的方式实现,而 set 以另一种方式实现(讲述重复)。设置不允许重复列表允许重复。
所以我想说的是,当子实体和超实体没有共同特征时,我们必须去接口
更清楚地说,如果假设我们将 Collection 设置为抽象类,我们需要正确定义一些方法,而不仅仅是声明,但是 list 和 set 的功能是不同的(没有共同的定义),因此他们只是将其声明为接口并制定了强制规则 list 和 set 都应该实现这一点。
但是,如果有一些共同的功能,那么两者都将其保留为抽象类。
因此,从 Java 本身获取一个示例。让我们考虑一下抽象的 Number 类。让我们看看为什么现在不能使用界面完成!
**public abstract class Number
extends Object
methods are**
byte byteValue()
以字节形式返回指定数字的值。
abstract double doubleValue()
以双精度形式返回指定数字的值。
abstract float floatValue()
以浮点数形式返回指定数字的值。
abstract int intValue()
以 int 形式返回指定数字的值。
abstract long longValue()
以 long 形式返回指定数字的值。
short shortValue()
以短整数形式返回指定数字的值。
现在这里的 byteValue 是一个非抽象方法,而其他方法 XXXValue 是抽象的。我们会看到Y???
字节值()
// taken from Number class java doc api
public byte byteValue()
以字节形式返回指定数字的值。这可能涉及舍入或截断。
And this byteValue() method is being overriden by all the other classes like Integer,Double,Float etc.
相反,他们可以保持 byteValue() 也抽象!但他们力不从心。想知道他们为什么这样做。