java - Java中重新定义一个引用(扩展使用)

标签 java

我有一个关于 extend 的用法的问题,我无法理解。 对于该示例,我将使用两个类:

public class Father {

    protected String message="Father";


    public void printme(){
        System.out.println(this.message);
    }
}

public final class Son extends Father {

    protected String message="Son";

}

我的问题是,为什么如果我调用:

new Son().printme();

它打印“父亲”?如何解决仅更改“Son”类的问题?

提前致谢

最佳答案

选项:

  • 重写 printme 方法。
  • 不是在 Son 中声明一个新字段,而是更改 Father 字段的值(来自 Son,您可以这样做,因为它是保护 - 呃)

字段不是多态的。 Father 中引用 message 字段的代码将始终引用在 Father 中声明的变量。

我强烈建议:

  • 您总是将字段设为私有(private),因此在这种情况下,您还想在 Father
  • 中提供(比如说)一个公共(public) getter 和一个 protected setter
  • 不要像这样隐藏字段,部分原因是没有经验的开发人员错误地认为正在进行某种覆盖

关于java - Java中重新定义一个引用(扩展使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7739808/

相关文章:

java - Libgdx 滚动 TiledMaps

java - Objectify/Appengine 枚举添加的向后兼容性

java - JMapViewer: map 刚刚加载时未设置平移和缩放

java - JAXB REST PUT 引用关联

java - 如何在 Spring Boot Kotlin 项目中修复 "Unresolved reference: java"?

java - MOXy Dynamix JAXB 上下文解码到错误的属性名称

java - 迭代 Guava Cache 中的值会丢失数据

java - JPA混合继承策略

java - If 语句中的不兼容类型

java - 检查范围内的更多整数