【发布时间】:2019-05-30 14:08:07
【问题描述】:
我知道创建抽象类背后的概念用途,即为其子类定义一个公共接口,其中一些实现留给各个子类。
我的假设是否正确,即技术上不需要抽象类,因为无论如何您都可以覆盖超类方法?抽象类是否只是为了让开发人员更清楚类的意图而创建的?
我的意思的例子:
// Using an abstract class
abstract class Car
{
int fuel;
int getFuel()
{
return this.fuel;
}
abstract String getColor();
}
class RedCar extends Car
{
String getColor()
{
return "red";
}
}
// Without an abstract class
class Car
{
int fuel;
int getFuel()
{
return this.fuel;
}
String getColor()
{
return "defaultColor";
}
class RedCar extends Car
{
String getColor()
{
return "red";
}
}
【问题讨论】:
-
在将默认方法添加到接口之前,抽象类是允许类共享通用功能(和代码)的一种方式。如果你的抽象类只包含抽象方法,那么接口总是更好的选择。
-
“技术上”没有理由拥有除了字节码之外的任何东西,所以这个论点就在窗外。抽象类让您可以定义一组对象的底层通用功能,而无需共同方面本身构成一个应该是可实例化的合理类。例如,银行账户是一个抽象概念:它与一个人相关联,可以用于存款和取款,但“银行账户”什么都不是,并且允许代码创建“银行账户”而不是“支票”帐户”或“储蓄帐户”等没有意义。所以,抽象吧。
-
此外,任何教 Java 的半体面的网站或书籍都会解释为什么抽象类很有用。
-
抽象类允许实现具有可变部分的算法,其中可变部分是抽象方法。一个例子是模板方法设计模式,查看Implementing the Template Method Pattern in Java了解更多详情
-
它就像一个类接口混合体。如果要从中构造对象(如接口),则必须对其进行扩展,它可以具有已定义的方法(如常规类),并且可以具有必须由子类定义的方法(如接口)。
标签: java class oop object abstract-class