Java 继承 - setter 仅在子类型中

标签 java inheritance subtype

我们有两个类(class)(一个 parent 和一个 child )。两者都使用私有(private)变量来存储值,但父级不应提供 setter(x 和 y 由构造函数提供,它们是某种不可变的)。 B 应该用 x 和 y 的 setter 扩展 A。有通用的方法吗?

class A{
    private int x;
    private int y;

    A(int x, int y){
        this.x = x;
        this.y = y;
    }

}

class B extends A{

    public void setx(int x){
        this.x = x;
    }

    //same for y
}

一些想法

  • 变量应该是私有(private)的
  • 父级的 x 和 y 必须是不可变的
  • B 必须提供一个 public setter

最佳答案

如果你希望变量是不可变的那么它应该是

class B extends A{

    public B(int x, int y){
          super(x, y);
    }
}

目前,您在 A 中的 x 和 y 变量不是不可变的。要使它们不可变,请在它们前面加上 final

这是您可以分配 x 和 y 的唯一方法,因为它们是私有(private)的。如果你想要 setter ,那么你必须使变量受到保护。

就我个人而言,我是不可变性的忠实拥护者,所以我会这样做而不是 setter - 创建对象通常非常便宜。

关于Java 继承 - setter 仅在子类型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13359244/

相关文章:

java - 如何从父泛型引用子泛型?

javascript - 在 JavaScript 中将基类型的属性应用于子类型

c# - 为什么我们不需要动态语言的接口(interface)?

java - 如何解决 Jenkins build error on recording test results?

java - Java 的双向可扩展层次结构

oracle - 如何消除子类型依赖?

java - 为所有 404 响应创建 servlet 过滤器

javascript - react ,未定义这个

postgresql - SQLAlchemy 无法找到与非特权用户的外键关系