首页 > 解决方案 > Java - 覆盖实例字段

问题描述

我现在无法自己测试,因为我的代码已损坏并且无法运行测试。

如果您final public在超类中声明了一个实例字段S

class S {
   public final String field = "field in super class"; 
}

class A extends S {
   public final String field = "field in sub class A"; 
}

class B extends S {
   public final String field = "field in sub class B"; 
}

正在做

System.out.println( new A().field );

这将打印:

field in sub class A

但是在任何代码中的任何地方给出一个方法:

public method(S instance) {
  System.out.printlng( instance.field ); // Will compile just fine! 
}

如果我打电话,这会打印什么method(new A())

标签: java

解决方案


我运行了这段代码:

public class HelloWorld{
static class S {
   public final String field = "field in super class"; 
}

static class A extends S {
   public final String field = "field in sub class A"; 
}

static class B extends S {
   public final String field = "field in sub class B"; 
}
public static void method(S instance) {
  System.out.println( instance.field ); // Will compile just fine! 
}
public void test(){
}
public static void main(String []args){
        method(new A());
     }
}

在 codingGround 上并返回“超类中的字段”。


推荐阅读