所以我们在讨论 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;
}
}
提前致谢。
答案 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
使用而没有其他类使用并且是 component
的 OuterClass
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();