gpt4 book ai didi

java - java中的多态行为

转载 作者:行者123 更新时间:2023-11-30 02:02:54 24 4
gpt4 key购买 nike

我有以下java代码,

interface A {
int a = 5;
}

class B {
int a = 6;
}

public class C extends B implements A {
int b = super.a;//Line 10
public static void main(String[] a) {
System.out.println(new C().b);//6

}
}

我预计编译器会在第 10 行出现错误,因为编译器不知道要引用哪个“a”。但没有编译器错误。输出是 6。有人能解释一下它如何获取类 B 的实例变量值(6)为什么不获取接口(interface) A 的“a”值(即 5)吗?

最佳答案

super关键字用于引用父类,在本例中为 B 。因此,您得到的输出为 6 .

a定义于 interface A是静态的并且 a定义于 Class B是一个实例变量。因此,当我们这样做时super.a ,它引用a的实例值这是在 Class B 中定义的

如果您重命名 B 中的变量说成aa ,你会得到编译器错误,说 a cannot be resolved or is not a field因为a定义于 interface A无法在 class C 中直接访问,因为默认情况下是 static 。访问a定义于 interface A ,我们需要显式调用A.a上课C

如果您定义,a作为静态 class B ,并删除 super ,你会得到compiler error: The field a is ambiguous

关于java - java中的多态行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52242485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com