Java : 调用与接口字段冲突的抽象 class 的非静态字段

Java : call a non-static field of an abstract class in conflict with an interface's field

如何从抽象 class Confused("ConfusedValue") 中显示“name”非静态字段的值? 我尝试了 3 种方法,但都有错误。我只能显示 Confuslable 的名称 value("ConfusableValue")

interface Confusable {
    String name = "ConfusableValue";

    String confuse();
}

abstract class Confused {
    String name = "ConfusedValue";

    abstract Object confuse();
}

public class Test extends Confused implements Confusable {
    public static void main(String[] args) {
        Test a = new Test();
        // --- OK
        System.out.println("Confusable.name: " + Confusable.name);
        // --- Errors
        System.out.println("name: " + name); // Error : The field name is ambiguous
        System.out.println("Confused.name: " + Confused.name); // Error : Cannot make a static reference to the non-static field Confused.name
        System.out.println("a.name: " + a.name); // Error : The field a.name is ambiguous
    }
}

不继承字段名。他们只是互相影子。这是编译器关心的问题,但就运行时而言,它们都是独立存在的,只是碰巧共享一个名称。

所以我们只需要让类型看起来适合编译器,我们可以通过显式向上转换来做到这一点。这些是向上转换(即扩大转换),因此它们是安全的并保证成功。

System.out.println("The method confuse returns: " + ((Confused)a).name);
System.out.println("The method confuse returns: " + ((Confusable)a).name);