我正在扩展一个类来存储我的应用程序所需的一些额外字段,但我扩展的类没有setter方法,只是一个默认的构造函数。
http://restfb.com/javadoc/com/restfb/types/Post.html#Post()
我正在使用一个框架,要求getter以正确的命名格式作为类型中的字段。但是,由于我无法从构造函数或setter中设置字段,因此我保留了我希望存储在新对象中的初始对象的本地副本。
然后我重写了从初始对象中提取数据的方法,如下所示:
@Override
public String getMessage() {
return initialPost.getMessage();
}
这似乎不是一种做事的好方法,一个令人讨厌的原因是,如果我想使用所有字段,我必须覆盖每个方法。
解决此问题的最佳方法是什么?这是构成而不是继承的用例吗?
我想我可能试图将两者结合起来,这看起来不对!
public class MyPost extends Post{
private String postId;
private Post initialPost;
private PostType type;
private Brand brand;
private Product product;
private List<Photo.Image> postImages;
感谢所有建议。
答案 0 :(得分:2)
你确实将作文和继承结合起来;这是一个非常令人困惑的情况。我会继承继承,因为你将一个具有更特定目的的对象的行为扩展到该对象。
这也解决了您的问题,因为public
类中的Post
方法也可以作为其子类的public
方法使用(因此,框架可以愉快地使用{{ 1}}没有你必须重新定义它。)
从我的评论中:
getMessage()
本质上是一个不可变对象,因此不打算由你构造。您可以覆盖Post
中Post
的方法并添加您自己的getter / setter,但您应该反映这是否是您想要采用的方法。
如何实现此目的的一个示例:
MyPost
现在来自class Post {
private String body;
public String getBody() {
return body;
}
}
class MyPost extends Post {
private String body;
public void setBody(String body) {
this.body = body;
}
@Override
public String getBody() {
return body;
}
}
类的getBody()
方法被来自Post
的自定义方法覆盖。