Java 继承、受保护或设置程序、获取程序

Java 继承、受保护或设置程序、获取程序,java,inheritance,Java,Inheritance,我有基础课。动物(摘要) 一些类(狗,猫…)扩展了这个类。 我有一些价值观,必须在每一个动物的对象。 狗、猫的一些功能。。。使用此值,有时更改它们。 我想知道我是否需要在Animal getter&setter中创建此值或将此值置于保护状态。做这件事的好方法是什么。 此外,其中一些值必须初始化。有一种方法可以执行此操作:值abstract?将这些值放入Animal类中,并创建公共getter和setter。这些将在所有狗、猫、鱼等上可用。使用getter和setter,这是标准的Java方法,消

我有基础课。动物(摘要) 一些类(狗,猫…)扩展了这个类。 我有一些价值观,必须在每一个动物的对象。 狗、猫的一些功能。。。使用此值,有时更改它们。 我想知道我是否需要在Animal getter&setter中创建此值或将此值置于保护状态。做这件事的好方法是什么。
此外,其中一些值必须初始化。有一种方法可以执行此操作:值abstract?

将这些值放入Animal类中,并创建公共getter和setter。这些将在所有狗、猫、鱼等上可用。使用getter和setter,这是标准的Java方法,消除了变量来源的混淆,并允许父类对值进行任何需要的预/后处理(如设置时验证或获取时延迟初始化)。此外,在许多面向方面的编程(如果您使用或计划使用Spring,这一点很重要)依赖于方法调用拦截,使用getter和setter也会有帮助。

我会在Animal中保护属性,以便它们可以在子类(Dog和Cat)中直接引用,但是有公共的getter和setter可以访问其他任何地方

public abstract class Animal {
    protected String species;
    ...
    public String getSpecies(){
        return species;
    }
    public void setSpecies(String species){
        this.species = species;
    }
}

简而言之,答案是肯定的,如果您希望超类中的某个成员出现在子类中,则应该使该成员受到保护。我知道我可以使其受到保护。但是设置setter和getter是否更好,通过这种方式,我可以将setter设置为抽象的?我总是在类之外的任何地方使用getter和setter,因为如果在设置字段时逻辑发生变化,可以在setter中完成。例如,假设您有一个接受字符串的方法“walk”。但后来您决定将其用作整数。不要遍历所有子类并将其更改为整数,只需向setter添加一些“parseInt”逻辑即可