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)
是否创建了抽象类以使类的意图更清晰?
这是对的,但它也阻止了开发人员做"愚蠢"的事情.
例如,您无法创建抽象类的实例.在代码的上下文中,创建"通用"没有意义Car
.您只能创建一个BlueCar
或一个RedCar
或其他子类.虽然匿名子类的实例看起来像抽象类的实例,但它们最终是从子类构造的.Car
但是,如果你使类抽象化,开发人员不会意外地创建一个实例Car
,因为编译器会抱怨.
抽象类也迫使开发人员实现抽象方法.使用非抽象Car
类,我可以继承它,忘记我需要覆盖它getColor
.现在代码的其他部分可能会调用getColor
并获得无意义的结果"defaultcolor".什么是默认颜色?使方法抽象强制子类考虑实现所需的方法.
归档时间: |
|
查看次数: |
67 次 |
最近记录: |