【发布时间】:2021-10-13 01:46:09
【问题描述】:
我怀疑抽象类中的非抽象方法是否可以在内部调用抽象方法?
例如:
abstract class Car {
abstract void startEngine();
abstract void startRadiator();
void start(String type) {
if (type.equals("Engine")) {
startEngine();
else {
startRadiator();
}
}
class Maruti extends Car {
void startEngine(){
System.out.println("Starting the engine::");
}
void startRadiator(){
System.out.println("Starting the Radiator::");
}
}
public class Main {
public static void main(String args[]) {
Car c = new Maruti();
c.start("Engine");
}
}
这是允许的吗?答案是正确的,但想了解这是否是正确的设计,我们将来不会遇到任何设计问题吗?
【问题讨论】:
-
是的,这是允许的。该类只有在基于抽象父类的具体子类时才会被实例化,因此抽象方法在调用时保证是非抽象的。
-
但是,看起来子类方法是从父类调用的?不是吗?
-
远非明确禁止,这是一种已知的设计模式:en.wikipedia.org/wiki/Template_method_pattern
-
这种模式解释很有帮助。谢谢!
标签: java oop inheritance abstract-class abstraction