为什么不能使用super关键字引用接口变量

时间:2019-12-31 03:38:45

标签: java oop

我是Java的新手,据我所知,通常,我们使用superthis关键字来引用超类属性。以及我们不能在静态上下文(静态方法)中使用thissuper关键字。但是我有一个问题。我使用了一个匿名类来使用接口,如下所示。我试图从匿名类内部引用number变量(位于接口中)。但是即使它不是静态上下文,也无法使用super关键字引用数字。问题是什么?。我的代码如下。

    interface Age{
       public static final int number =25;
       public abstract int getAge();
    }

    public class Main {
      public static void main(String[] args) {
        Age age = new Age(){
            public int getAge(){
              int number = super.number;//compile error
              //why cannot use super keyword in here to refer number variable
              return number;
            }
        };
        age.getAge();
      }
   }

2 个答案:

答案 0 :(得分:4)

super关键字引用父,而不引用任何接口。在您提供的代码中,Age是一个接口。无论您正在查看匿名类还是命名类,您都会看到相同的行为。

如果您想知道为什么为什么语言设计者决定不允许super引用一个接口,则Aggragoth对此进行了评论:一个类可以实现多个接口,因此如果它们每个都实现拥有一个名为number的成员,编译器将无法确定您尝试使用number引用哪个接口的super.number

答案 1 :(得分:0)

int number = super.number; 在接口中,每个声明的变量都是最终变量,即其值不能更改。此外,关键字super用于获取父类的public, protected or default variables,而不是接口。由于这些原因,编译器会在此处引发错误。

正如StriplingWarrior和Aggragoth所说,一个类可以实现多个接口,因此,如果它们每个都有一个名为number的成员,则编译器将无法确定您要引用的接口号。与super.number