java - 更改子类中的变量值?

标签 java

自从我使用 Java 进行任何工作以来已经有一段时间了,而且我在使用 Java 做任何事情方面的经验真的非常有限,大部分情况下我都是用更高级的特定语言、脚本语言等编写的。

我假设我不理解为类成员分配默认值背后的概念。

// parent
public class A {
    protected int value = 0;
    public void print() {
        System.out.println(value);
    }
}

// child class
public class B extends A {
    int value = 1;
}

为简短起见,创建 B 的实例并调用 print() 打印 A 中设置的“值”的原始值。

我假设 A 上定义的函数具有与 B 完全不同的“值”上下文,而不是“此对象拥有的名为‘值’的变量”的某种通用标识符。

除了创建所述类的子类之外,还有什么其他方法可以组织某个类的常见变体?某种工厂对象?接口(interface)似乎不是答案,因为那时我必须重新定义类的每个方面,所以我这样做一无所获。

非常感谢任何帮助,谢谢。

最佳答案

子类字段不会覆盖父类(super class)字段。

您可以通过构造函数设置默认值,如下所示。

// parent
public class A {
    private int value = 0;
    public A( int initialValue ) {
        value = initialValue;
    }

    public void print() {
        System.out.println(value);
    }
}

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

此外,在大多数情况下,如果您避开保护区,您的生活会更轻松。

protected 字段打开您的数据以供其他类直接访问和修改,其中一些您可能无法控制。糟糕的封装可以允许错误并禁止修改。正如 Java tutorials on access control 中的建议:

"Use the most restrictive access level that makes sense for a particular member. Use private unless you have a good reason not to."

关于java - 更改子类中的变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532532/

相关文章:

java - 这个简单的 JPQL 查询究竟是如何工作的?

java - BufferedReader 循环替换

java - 如何让 AutoHotKey 将 java 输出转换为文本格式?

java web 服务 - wsgen

javafx Tableview 按日期排序

java - JSON 数据格式

java - 在 JEditorPane 中获取可见文本

java - 在 Windows 10 上使用 OpenJDK 11 的 Eclipse 2018-09

java - 如何显示 swt 文本框的悬停文本

java - 剪刀石头布游戏