Ниже приведен популярный пример использования абстрактного метода и переопределения.
class Demo {
public static void main(String[] args) {
Parent a = new Child_A();
Parent b = new Child_B();
a.method();
b.method();
}
}
abstract class Parent {
abstract void method();
}
class Child_A extends Parent {
@override
void method() {
do the task for Child_A;
}
}
class Child_B extends Parent {
@override
void method() {
do the task for Child_B;
}
}
Кажется, что мы всегда можем достичь одного и того же, определив универсальный метод в суперклассе, который использует ключевое слово instanceof
для определения подкласса и выполняет соответствующую задачу для подкласса.
class Demo {
public static void main(String[] args) {
Parent a = new Child_A();
Parent b = new Child_B();
a.method();
b.method();
}
}
class Parent {
void method() {
if (this instanceof Child_A) {
do the task for Child_A;
}
else if (this instanceof Child_B) {
do the task for Child_B;
}
}
}
class Child_A extends Parent {
}
class Child_B extends Parent {
}
Какой стиль кода лучше и почему?