T和Java中的继承

int*_*_32 3 java generics

我有一个带有静态字段F的A类:

class A {
    public static String F = null;
}
Run Code Online (Sandbox Code Playgroud)

B级:

class B extends A {
   public static String F = "somestring";
} 
Run Code Online (Sandbox Code Playgroud)

和一个使用字段F的方法的类型化的类:

class C<T extends A> {
   public void someMethod() {
      String someString = T.F;
      // Manipulations with someString
   }
}
Run Code Online (Sandbox Code Playgroud)

然后我的代码调用它.

C<B> c = new C<B>();
c.someMethod();
Run Code Online (Sandbox Code Playgroud)

当我尝试使用someString进行操作时,我得到一个空指针异常.所以,TF是null,但是T是B,所以它应该是"somestring"!为什么?

小智 7

您无法覆盖字段.由于它是扩展A,它将始终使用A中的字段.

在A类和B类中添加一个返回F的getter.从那里,用A中的方法覆盖A中的方法.

class A {
    public String getF(){
        return null;
    }
}

class B {
    @Override
    public String getF(){
        return "someString";
    }
}
Run Code Online (Sandbox Code Playgroud)