最近看《Thinking in Java》,关于内部类的继承那一章。
其中有一个练习:
“创建一个包含内部类的类,此内部类有一个非默认的构造器(需要参数的构造器)。创建另一个包含内部类的类,此内部类继承自第一个内部类。”
下面是书中给出的代码:
class FirstOuter {
public class FirstInner {
FirstInner(String s) {
System.out.println("FirstOuter.FirstInner() " + s );
}
}
}
public class SecondOuter {
public class SecondInner extends FirstOuter.FirstInner {
SecondInner(FirstOuter x) {
x.super("hello");
System.out.println("SecondOuter.SecondInner()");
}
}
public static void main(String[] args) {
FirstOuter fo = new FirstOuter();
SecondOuter so = new SecondOuter();
SecondInner si = so.new SecondInner(fo);
}
}
我的疑惑是这里,x.super("hello");
,为什么是调用另一个外部类的super(),而且传入的是所继承的内部类的构造器所需要的参数,我搜索了一下没有找到相关的解释,这是固定的语法么
忘各位解惑,谢谢。
迷茫2017-04-17 17:39:20
코드를 다음과 같이 변경하는 경우:
으아아아x.new는 더 이상 필요하지 않습니다. 사실 간단히 이해하면 정적 내부 클래스는 객체 매개변수와 같지 않습니다. 매개변수를 추가로 처리하기 전에 먼저 객체를 인스턴스화해야 합니다.
黄舟2017-04-17 17:39:20
x.super("hello"); 왜 다른 외부 클래스의 super()를 호출하는 걸까요
외부 클래스를 호출하는 super
이 아니고, FirstInner
라고 하는 super
은 이렇게 작성해야 합니다.
내부 클래스(비정적)를 획득할 때는 해당 외부 클래스의 개체가 있어야 합니다. 이는 so.new SecondInner(fo)
x.super("hello")
과 같이 겉보기에 이상한 구문으로 이어질 수 있습니다. 이해하실 땐 무시하세요. 앞부분의 so.
x.
를 빼고 문법적으로 이해하시면 괜찮습니다.
@好school利行 개혁과 마찬가지로 더 이해하기 쉽고 더 일반적일 수 있습니다.