这是一个关于应该使用继承方式的简单问题 .
考虑到我必须提供业务逻辑来打印'foo'和'bar'并且我有两个类的层次结构:一个具有仅打印'foo'的方法和另一个首先扩展并具有打印'bar'的方法 . 在这两个类中,我有一个名为 necessaryMethod() 的方法,负责调用那些打印'foo'和'bar'的方法 .
我用两种方法实现它的方式:
第一种方法是让基类做一些事情,派生类利用它 . 第二种方法是让基类不做任何事情(只提供实现)并将所有责任放在派生类上 .
请考虑以下代码:
Approach 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();
}
}
Approach 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();
}
}
哪种方法对于代码的可维护性和可读性是很好的(在大型软件产品/大类层次结构的上下文中;这只是一个例子)?
(这是一个通用的编程问题 . 我没有征求意见 . )