我们可以将getter和setter放在抽象类中吗?

时间:2010-10-28 08:10:42

标签: java

public abstract ClassName
{

 // methods
 // setters & getters...???

}

2 个答案:

答案 0 :(得分:11)

答案简短:是的:

public abstract class ClassName {
    private String field;

    public String getString() {
        return field;
    }

    public void setString(String field) {
        this.field = field;
    }
}

更广泛的答案(我不确定它现在对你来说是实际的):

您应该意识到这些方法(如果它们未使用final修饰符声明)可以在子类中重写。这就是为什么考虑方法合同并仔细记录它们的重要性。如果抽象类的一个方法调用另一个方法,那么这个事实也应该记录下来。

您的抽象类的所有受保护和公共方法(以及常量,并且在极少数情况下 - 受保护的字段)都将成为API的一部分。因此,其他开发人员可以使用它们,并且更改它们并不是很容易。

关于最佳做法:

1)在创建类Serializable之前请三思而后行 - 这将使所有子类都可以被替换(并且如果您想要生成可能不会被破坏的程序),您应该关心任何子类的可能序列化。

2)实现Cloneable实际上是相同的(不要在顶级抽象类中更好地实现它)。

3)您应该提供正确的equalshashCode实现,同时考虑到2个子类可以与抽象类中的您的实现进行比较。

4)考虑提供自然排序(即实现Comparable接口)。如果存在真正的自然顺序,通常是个好主意。

答案 1 :(得分:-3)

伙计当然,实现抽象类型修饰符getter()会导致编译错误!