为继承字段添加特定值

Adding specific values for inherited fields

我在继承方面遇到了一些麻烦(这里是学生)。我需要能够为我创建的每个 subclass 使用 1 个继承的私有字段。显然 subclasses 无法访问继承的字段,但是当创建新对象时,继承的私有字段是该对象的一部分。出于我的目的,尽管每个 subclass 都需要为该继承字段拥有自己的特定值。我的第一次尝试看起来像这样:

Public class A {

    private int x = 0;

    public A(int n) {

        x = n;
    }

    public int useX() {

        return x;
    }
}

Public class B Extends A {
    int n = 1;

    public B() {
        super(n);
    }

    useX(); // Return 1?
}

Public class C Extends A {
    int n = 2;

    public B() {
        super(n);
    }

    useX(); // Return 2?
}

但是我的教授告诉我,我也可以在我的 Super class 中使用 setter 方法来创建那个新字段,从那里我很困惑。谁能帮我指出正确的方向?

一个普通的 Java Bean 提供 public accessorsmutators (又名 getters setters) 用于它的字段。但是,您 可以 提供 protected setter。比如,

public class A {
    private int x = 0;

    public int getX() { // <-- the usual name.
        return x;
    }

    protected void setX(int x) {
        this.x = x;
    }
}

然后你的子类可以调用那个 setter

public class B extends A {
    public B() {
        super();
        setX(1);
    }
}

然后 B.getX()(或者 B.useX() 如果你 真的 更喜欢)将 return 1.