java - java继承覆盖变量的解释

标签 java polymorphism

有人可以解释为什么该函数从父类(super class)打印变量而不是从子类打印变量吗? Java中类变量不能被覆盖吗?

 class A {
  int i = 1;
  int fun() {
   return i;
  }
 }

 class B extends A {
  int i = 2;
 }

class Main {
 public static void main(String[] args) {
  System.out.println(new B().fun());
 }
}

这将打印出 1 而不是 2

最佳答案

因为子类中声明的字段永远不会覆盖父类(super class)的字段。

重写是针对方法的。
如果您想使用当前类的 i 值,您可以引入 getI() 方法来提供 i 值:

 class A {
  int i = 1;
  int fun() {
   return getI();
  }
  int getI(){
    return i;
  }
 }

并在子类中重写它:

 class B extends A {
  int i = 2;

  int getI(){
    return i;
  }
 }

关于java - java继承覆盖变量的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46863014/

相关文章:

java - Servlet session 属性的多态性

java - Open GL 转换

java - 在jsp中返回多个值

c++11 - unique_ptr 向上转型作为返回

c# - 如何在 DDD 和存储库模式中对此建模

C++ 派生类缩小成员类型

java - 什么是用于 Spring Boot 日志记录的默认 CONSOLE_LOG_PATTERN 以及在哪里可以找到它?

java - Activity 未在 AndroidManifest.xml 中声明,即使它是

java - 隐藏枚举常量

java - 为什么我们在 Java 中使用接口(interface)引用类型?