为什么首先有抽象类?

use*_*063 0 java oop abstract-class class object

我知道创建抽象类背后的概念用法,即为其子类定义一个公共接口,其中一些实现留给各个子类.

我是否正确地假设技术上没有必要抽象类,因为你可以覆盖超类方法?是否创建了抽象类以使类的意图更清晰?

我的意思是:

// 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";
    }
}
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 5

是否创建了抽象类以使类的意图更清晰?

这是对的,但它也阻止了开发人员做"愚蠢"的事情.

例如,您无法创建抽象类的实例.在代码的上下文中,创建"通用"没有意义Car.您只能创建一个BlueCar或一个RedCar或其他子类.虽然匿名子类的实例看起来像抽象类的实例,但它们最终是从子类构造的.Car但是,如果你使类抽象化,开发人员不会意外地创建一个实例Car,因为编译器会抱怨.

抽象类也迫使开发人员实现抽象方法.使用非抽象Car类,我可以继承它,忘记我需要覆盖它getColor.现在代码的其他部分可能会调用getColor并获得无意义的结果"defaultcolor".什么是默认颜色?使方法抽象强制子类考虑实现所需的方法.