我看到这个有关内部类的OCPJP问题中有多少看起来像有目的的名称冲突,就创建了这个测试问题。问题:我将如何创建ID = 1的A类的实例。

class A{ int id = 1; }

class Bag {
    static class A{ int id = 2; }
    }

public class InnerClasses
    {
    static class A{ int id = 3; }

    public static void main(String[] args)
    {
    A A1 = new A();
    Bag.A A2 = new Bag.A();
    A A3 = new A();

    System.out.println(A1.id); //prints 3
    System.out.println(A2.id); //prints 2
    System.out.println(A3.id); //prints 3
    }
}

最佳答案

您可以在名为A的单独Java文件中定义类A,并通过使用完整包名称调用构造函数来实例化它。像这样:

com.mypackage.A A1 = new com.mypackage.A();
Bag.A A2 = new Bag.A();
A A3 = new A();

System.out.println(A1.id); //prints 1
System.out.println(A2.id); //prints 2
System.out.println(A3.id); //prints 3


尽管使用相同名称定义内部类的目的只是为了覆盖其他类的定义。所以这很重要...

关于java - Java:嵌套的类定义-名称冲突与否? (OCPJP),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26178918/

10-10 08:40
查看更多