Java:我可以在外部类中创建内部类的变量类型吗?

时间:2021-01-22 03:34:42

标签: java

所以我们在讨论 LinkedList 的主题时注意到在外部类 SingleLinkedList 上声明了一个 Node(内部类名)类型的变量。为什么允许这种行为?我知道你可以在外部类中访问内部类的成员,但不能声明内部类的变量

private class SingleLinkedList {

        private Node head; //This here is my doubt 
         //.
         //.
         //.
                
      private class Node {

        // reference to the next node in the chain, or null if there isn't one.
        Node next;
 
        // data carried by this node. could be of any type you need.
        Object data;
 
        // Node constructor
        public Node(Object dataValue) {
            next = null;
            data = dataValue;
        }
}

提前致谢。

3 个答案:

答案 0 :(得分:0)

没有错,你定义了一个内部类,然后是它的一个实例。您还可以声明稍后在外部类中定义的内部类的实例 - 编译器足够聪明,可以多次遍历代码并找到引用。

关于第二个问题,你可以这样做:

class Person {
    class Friend {
       Person p1,p2;
       Friend(Person a, Person b) { p1=a;p2=a}
    }
    List<Friend> friends;
}

但这会失败:

class Person {
    Person(String name) {}

    class Friend {
       

       Person p1=new Person("john"), p2=new Person("mike");

       Friend(Person a, Person b) { p1=a;p2=a}

    }
    List<Friend> friends;
}

答案 1 :(得分:0)

想一想:如果不在“SingleLinkedList”类范围内,“Node”还能用在哪里?

答案 2 :(得分:0)

Java 允许您在另一个类中定义一个类,即嵌套类或内部类。在 Java 中,内部/嵌套类是其封闭类的成员。

class OuterClass {
   ...
   class InnerClass {
     ...
   }
}

问题 1: Why is this behavior allowed?

A1:以下是三个令人信服的理由:

  • 更多封装:如果上面的 InnerClass 被声明为私有,则只能由 OuterClass 的成员访问。它对外界是不可见的。

  • 一个类只使用了一个地方:如果 InnerClass 只被 OuterClass 使用而没有其他类使用并且是 componentOuterClass 1}},将其定义在 OuterClass 内会更合适。

  • 可读性更高:在相关和使用的位置嵌套类,使代码更具可读性。

Q2:I knew you could access members of your inner class in your outer class but not declare variables of the inner class

A2:是的,如前所述,内部类是封闭类的成员。

  • 因此您可以在封闭类 (OuterClass) 中声明内部类的变量。

  • 此外,InnerClass 的实例仅存在于 OuterClass 的实例中。内部实例可以直接访问其封闭实例的方法和字段(即使它们被声明为私有)。

为了更进一步,要从两个类之外的范围创建内部类的对象,您必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();
相关问题