如何在没有setter的情况下扩展对象以获得超类状态

时间:2014-06-01 22:22:36

标签: java oop

我正在扩展一个类来存储我的应用程序所需的一些额外字段,但我扩展的类没有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;

感谢所有建议。

1 个答案:

答案 0 :(得分:2)

你确实将作文和继承结合起来;这是一个非常令人困惑的情况。我会继承继承,因为你将一个具有更特定目的的对象的行为扩展到该对象。

这也解决了您的问题,因为public类中的Post方法也可以作为其子类的public方法使用(因此,框架可以愉快地使用{{ 1}}没有你必须重新定义它。)

从我的评论中:

  

getMessage()本质上是一个不可变对象,因此不打算由你构造。您可以覆盖PostPost的方法并添加您自己的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的自定义方法覆盖。