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

W M*_*W M 2 java

public abstract ClassName
{

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

}
Run Code Online (Sandbox Code Playgroud)

Rom*_*man 11

简短回答:是的:

public abstract class ClassName {
    private String field;

    public String getString() {
        return field;
    }

    public void setString(String field) {
        this.field = field;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

关于最佳实践:

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

2)实现相同Cloneable(不要在顶级抽象类中更好地实现它).

3)您应提供正确equalshashCode执行考虑到2子类可以与之比较实现从抽象类.

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