찾다

 >  Q&A  >  본문

java - 关于内部类继承另一个类的内部类

最近看《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(),而且传入的是所继承的内部类的构造器所需要的参数,我搜索了一下没有找到相关的解释,这是固定的语法么

忘各位解惑,谢谢。

PHPzPHPz2888일 전437

모든 응답(3)나는 대답할 것이다

  • 迷茫

    迷茫2017-04-17 17:39:20

    코드를 다음과 같이 변경하는 경우:

    으아아아

    x.new는 더 이상 필요하지 않습니다. 사실 간단히 이해하면 정적 내부 클래스는 객체 매개변수와 같지 않습니다. 매개변수를 추가로 처리하기 전에 먼저 객체를 인스턴스화해야 합니다.

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 17:39:20

    x.super("hello"); 왜 다른 외부 클래스의 super()를 호출하는 걸까요

    외부 클래스를 호출하는 super이 아니고, FirstInner라고 하는 super은 이렇게 작성해야 합니다.
    내부 클래스(비정적)를 획득할 때는 해당 외부 클래스의 개체가 있어야 합니다. 이는 so.new SecondInner(fo)
    x.super("hello")과 같이 겉보기에 이상한 구문으로 이어질 수 있습니다. 이해하실 땐 무시하세요. 앞부분의 so. x.를 빼고 문법적으로 이해하시면 괜찮습니다.

    @好school利行 개혁과 마찬가지로 더 이해하기 쉽고 더 일반적일 수 있습니다.

    회신하다
    0
  • PHPz

    PHPz2017-04-17 17:39:20

    x.new와 super(...)를 하나로 합칠 수 있나요? 이런 글은 처음 봤습니다.

    회신하다
    0
  • 취소회신하다