외부 객체를 사용하여 클래스의 생성자 호출 내에서 내부 클래스 .super 상속 할 때 ()

간단한 실행

  오늘, "자바 프로그래밍 아이디어"보고 우리가 아주 특별한 구문, 오랜 시간 동안 무지 힘을 보았다 - 파생 클래스의 객체를 생성하려면, 내부 클래스에서 상속하는 파생 클래스를 먼저 부모 클래스를 작성해야합니다 물체, 즉, 클래스 생성자 내부 내부 클래스 및 메소드 호출은 객체 생성 구문은 외부 객체 .super ();


분석

  우리 모두는 우리가 생성자가 상위 클래스를 호출 기본 설정됩니다 첫 번째 줄에있는 클래스 생성자의 객체를 만들 때 자바, 부모의 대상, 그리고 슈퍼 키워드 참조 된 개체의 부모를 생성하는 것을 알고있다 . 내부 클래스를 상속하는 클래스는, 우리가 이전에이 클래스의 객체를 생성한다면, 물론, 당신은 내부 클래스의 오브젝트 인 상위 클래스의 객체를 생성해야합니다.

  그러나, 문제는, 내부의 클래스는 각 클래스 내에 오브젝트가 해당 규칙가 그 외측 클래스 객체에 바인딩되어야 클래스에서 클래스 외부 방법 및 동작을 호출 할 수있다, 이유는 외부 클래스의 속성입니다. 우리가 일반적으로 내부 클래스 객체를 생성 할 때, 먼저 사용하여 외부 클래스 객체를 생성 할 필요가 외부 객체 .new를 내부 클래스 () 내부 클래스 객체를 생성하는 구문을 클래스 객체 내부 이번에는 클래스의 외부를 만들 수밖에 없다 객체입니다.

  우리가 내부 클래스, 우리는 그 객체를 생성 할 때 상속하는 클래스를 가질 때, 두 가지 조건을 충족해야합니다 :

  1. 객체를 작성하기 전에, 먼저 부모 클래스의 객체를 생성, 즉이 내부 클래스 객체를 상속한다;
  2. 내부 클래스 객체를 만들려면, 당신은 자신의 바인딩을 위해,이 내부 외부 객체 클래스를 가지고있다;

  그런 다음이 무지한 사람들을 강제로 다음과 같은 코드가 발생했습니다 :


코드 케이스

// 外部类
class Outer{
    // 内部类
    class Inner{

        // 默认构造方法
        Inner(){
        }
        // 带参构造方法
        Inner(String string){
        }
    }
}

// 继承类内部类的类
public class Test01 extends Outer.Inner{
    // 方式1:创建一个外部类Outer的对象,用来提供创建内部类所需的条件
    private static Outer outer2 = new Outer();
    
    // 方式2:类的构造方法传入一个外部类的对象,用来提供创建内部类所需的条件
    public Test01(Outer outer1){
        // 通过外部类对象.super()调用内部类的构造方法
        outer1.super("调用Inner的带参数构造方法");
        //也可以通过outer2调用
        // outer2.super("调用Inner的带参数构造方法");
    }

    public static void main(String[] args) {
        // 创建一个外部类的对象
        Outer outer = new Outer();
        // 创建内部类的派生类对象,传入外部类的引用
        Test01 test01 = new Test01(outer);
    }
}


코드 읽기

  위의 코드에서 우리는 Test01는 생성자에서 다음, 내부 클래스를 상속 볼 수 있습니다, 우리는 클래스 외부의 외부 객체와 그에게 제공해야합니다, 그것은 분석 (2)의 조건을 충족 질문했다 . 위의 코드는 외부 대상 클래스를 제공하는 두 가지 방법을 사용합니다 :

  1. 외부 객체는 생성자 올 매개 변수로 전달 된 코드 outer1 이상;
  2. 클래스의 외부 정적 클래스 멤버를 생성 , 즉, outer2 위의 코드;

  부모 객체는 객체가 Test01을 만들 때 나중에, 당신은 바인딩 할 수있는 외부 클래스 객체가 함께 (예 : 내부)을 만들 필요가 클래스 외부 외부의 객체를 제공합니다. 그러나, 문제는 우리가 서브 클래스의 객체를 생성 보통 때,이 생성자의 첫 번째 행이 자동으로 부모 클래스의 생성자를 호출합니다, 우리는하지만 여기에 쓸 수 없습니다. 여기에 부모 클래스는 컴파일러가이 내부 클래스와 개체를 만들려면 외부의 어떤 클래스 객체 모르는 것을 의미하는 내부 클래스입니다이기 때문에, 당신은 바인딩 클래스 내에서 자신의 외부 개체를 지정해야합니다. : 따라서, 거기에서 상기 코드는 사용하는 외부 개체 .super (매개 변수) 내부 클래스의 생성자를 호출 하는 클래스 내의 오브젝트를 생성하고, 클래스 객체는 외부 객체 클래스 생성자 내부 객체를 호출하는 내부 바인딩 .

  코드는 상기 외부를 내부 결합이 만들어 함께 개체 Test01 객체를 생성, 외부 클래스 오브젝트를 이용하여 클래스의 외부 물체의 두 외부있다. 또한,이 생성자의 코드 한 줄 이상, 그것은 첫 번째 줄에서 외부 클래스 .super 문에 도착하면, 문제이며, 일반 클래스 슈퍼 문이 첫 번째 줄과 유사 할 때이 만들었습니다. 또한 잘 이해 부모 클래스의 객체가 하위 클래스 개체 이전에 생성해야하기 때문에 .


개요

  즉 가장 중요한 것은 클래스가이 클래스에서 사용하는 부모 클래스의 생성자를 호출하고, 갖고 싶어, 내부 클래스를 상속 것을 기억하는 것입니다 외부 객체 .super (매개 변수) 구문을하고 , 컴파일러를 작성 표시해야 플러스 당신은 자신을 도움이되지 않습니다 , 그렇지 않으면 당신은 성공적으로 객체 클래스를 만들 수 없습니다.


참조

"자바 프로그래밍 아이디어"

추천

출처www.cnblogs.com/tuyang1129/p/11647431.html