我有以下课程。
public class BaseRequest {
protected List<Emp> names; // names property is required in many classes
}
public class FirstRequest extends BaseRequest {
public FirstRequest() {
names = new ArrayList<Emp>();
}
public setNames(List<Emp> names){
super.names = names;
}
public List<Emp> getNames(){
return super.names;
}
}
public class ServiceClass {
public void someMethod(List<Emp> emps) {
FirstRequest request = new FirstRequest();
request.setNames(emps);
//Some Logic
}
}
我正在以正确的方式继承吗?我怎么能进一步改善呢?
谢谢!
答案 0 :(得分:0)
取决于你想要做什么,对于这段代码,大多数事情似乎都没问题。 可能想改变
FirstRequest request = new FirstRequest();
到
BaseRequest request = new FirstRequest();
在超类中使用getters / setter。
此外,在FirstRequest的构造函数中,您应该与超类对话(例如,在那里执行ArrayList初始化)
public FirstRequest(){
super();
}
并且在超级班级
public BaseRequest()
{
// initialisation
}
答案 1 :(得分:0)
您可以将BaseRequest
转换为接口,并仅提供客户端使用的方法的签名。客户端应该只对提供的方法(api
)感兴趣,而不是实现细节然后您可以在所有类中实现它们实现接口。界面更灵活:
public interface BaseRequest {
List<Emp> getEmps();
void setEmps(List<Emp> list);
....
}
public class FirstRequest implements BaseRequest{
List<Emp> getEmps(){
return ...;
}
....
}
答案 2 :(得分:0)
我怎样才能进一步改善它?
将与names
相关的方法移至基类中,并制作names
private
。
public class BaseRequest {
private List<Emp> names = new ArrayList<Emp>();
public setNames(List<Emp> names){
this.names = names;
}
public List<Emp> getNames(){
return names;
}
}
public class FirstRequest extends BaseRequest {
// the rest of your stuff
}
您应该避免使names
受到保护:对于派生类和该类的其他用户,公共getter应该足够好。