Это простой вопрос о том, как следует использовать наследование.Наследование: использование базового класса или производного класса для работы
Учтите, что я должен предоставить бизнес-логику для печати «foo» и «bar», и у меня есть иерархия из двух классов: одна, у которой есть метод для печати только «foo», а другой, который распространяется первым и имеет метод для печати ' бар'. В обоих классах у меня есть метод с именем necessaryMethod()
, который берет на себя ответственность за вызов тех методов, которые печатают «foo» и «bar».
Как я реализовал ее в двух подходах:
Первый подход пусть базовый класс делать некоторые вещи и производный класс воспользоваться этим. Второй подход позволяет базовому классу не делать каких-либо вещей (только обеспечивая реализацию) и нести всю ответственность за производный класс.
Рассмотрим следующий код:
подход 1:
public class A{
protected void necessaryMethod(){
callFoo();
}
protected void callFoo(){
System.out.pritln("foo");
}
}
public class B extends A{
@Override
protected void necessaryMethod(){
super.necessaryMethod();
callBar();
}
protected void callBar(){
System.out.println("bar");
}
}
public class FooBarClass{
public static void main(String args[]){
B b = new B();
b.necessaryMethod();
}
}
подход 2:
public abstract class A{
protected abstract void necessaryMethod();
protected void callFoo(){
System.out.pritln("foo");
}
}
public class B extends A{
@Override
protected void necessaryMethod(){
calFoo();
callBar();
}
protected void callBar(){
System.out.println("bar");
}
}
public class FooBarClass{
public static void main(String args[]){
B b = new B();
b.necessaryMethod();
}
}
Какой подход был бы хорош для ремонтопригодности и читаемость кода (в контексте крупных программных продуктов/иерархии большого класса, это это просто пример)?
(Это общий вопрос программирования. Я не просил мнение.)
Этот вопрос будет более уместным на http://codereview.stackexchange.com/. – jaco0646
@ jaco0646 Как перенести вопрос? –