我了解创建抽象类背后的概念用途,即为其子类定义一个公共(public)接口(interface),其中一些实现留给各个子类。
我的假设是否正确,即技术上不需要抽象类,因为无论如何您都可以覆盖父类(super class)方法?创建抽象类是为了让开发人员更清楚地了解类的意图吗?
我的意思的例子:
// 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";
}
}
最佳答案
Were abstract classes just created to make the intention of the classes clearer to the developer?
没错,但它也可以防止开发人员做“愚蠢”的事情。
例如,您无法创建抽象类的实例。在您的代码上下文中,创建“通用”Car
是没有意义的。您只能创建 BlueCar
或 RedCar
或其他一些子类。虽然 anonymous subclass 的实例可能看起来像抽象类的实例,但它们最终是由子类构造的。但是,如果您将 Car
类抽象化,开发人员就不会意外创建 Car
的实例,因为编译器会提示。
抽象类还迫使开发人员实现抽象方法。使用您的非抽象 Car
类,我可以继承它并忘记我需要重写 getColor
。现在,代码的其他部分可能会调用 getColor 并获得无意义的结果“defaultcolor”。默认颜色到底是什么?使方法抽象迫使子类考虑实现所需的方法。
关于java - 首先为什么要有抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54031545/