Java 기초의 내부 클래스 상세 및 실례

4487 단어 Java내부 클래스
Java 기초의 내부 클래스 상세 및 실례
내부 클래스는 이해하기 어렵지만, 말하자면 사실은 한 클래스에 또 다른 클래스가 포함되어 있다
마치 한 사람이 대뇌, 지체, 기관 등 신체 결과로 구성된 것처럼 내부류는 그 중의 어떤 기관 중 하나에 해당한다. 예를 들어 심장: 그것도 자신의 속성과 행위(혈액, 박동)가 있다.
분명히 여기는 일방적으로 속성이나 방법으로 심장을 표시할 수 없고, 하나의 종류가 필요하다
심장은 인체에 있는데, 마치 내부류가 외부 내부에 있는 것과 같다
실례1: 내부 클래스의 기본 구조

// 
class Out {
  private int age = 12;
   
  // 
  class In {
    public void print() {
      System.out.println(age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out().new In();
    in.print();
    // 
    /*
    Out out = new Out();
    Out.In in = out.new In();
    in.print();
    */
  }
}
실행 결과: 12
위의 예에서 알 수 있듯이 내부 클래스는 사실 양호한 코드 구조를 심각하게 파괴했지만 왜 내부 클래스를 사용해야 합니까?
내부 클래스는 외부 클래스의 구성원 변수(사유 포함)를 마음대로 사용할 수 있기 때문에 외부 클래스의 대상을 생성하지 않아도 된다는 것도 내부 클래스의 유일한 장점이다
심장이 의사를 통해 피를 뽑는 것이 아니라 몸의 혈액에 직접 접근할 수 있는 것과 같다
프로그램이 컴파일된 후에 두 개가 생길 것이다.class 파일, 각각 Out.class 및 Out$In.class
여기서 $는 위의 프로그램의 Out을 나타냅니다.인중에 그거.
Out.In in = new Out().new In () 은 내부 클래스의 대상을 생성하는 데 사용할 수 있으며, 이런 방법은 두 가지 작은 지식이 존재한다. 주의해야 한다
  1.첫 번째 Out은 생성해야 할 내부 클래스 대상이 어느 외부 클래스에 있는지 표시하기 위해서입니다.
  2.외부 클래스의 대상이 있어야만 내부 클래스의 대상을 생성할 수 있다. 왜냐하면 내부 클래스의 역할은 외부 클래스의 구성원 변수에 접근하기 위해서이기 때문이다.
실례 2: 내부 클래스의 변수 접근 형식

class Out {
  private int age = 12;
   
  class In {
    private int age = 13;
    public void print() {
      int age = 14;
      System.out.println(" :" + age);
      System.out.println(" :" + this.age);
      System.out.println(" :" + Out.this.age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out().new In();
    in.print();
  }
}
실행 결과:
로컬 변수: 14
내부 클래스 변수: 13
외부 클래스 변수: 12
실례 1에서 알 수 있듯이 내부 클래스는 같은 이름의 구성원 변수와 국부 변수가 없는 상황에서 외부 클래스의 구성원 변수에 직접 접근하고 Out을 지정할 필요가 없다.this.속성 이름
그렇지 않으면 내부 클래스의 국부 변수가 외부 클래스의 구성원 변수를 덮어씁니다
내부 클래스 자체에 접근하는 구성원 변수는this를 사용할 수 있습니다.속성 이름, 외부 클래스에 접근하는 구성원 변수는 Out을 사용해야 합니다.this.속성 이름
인스턴스 3: 정적 내부 클래스

class Out {
  private static int age = 12;
   
  static class In {
    public void print() {
      System.out.println(age);
    }
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out.In in = new Out.In();
    in.print();
  }
}
실행 결과: 12
이를 통해 알 수 있듯이static로 내부를 정태화하면 내부류는 외부류의 정적 구성원 변수에만 접근할 수 있어 한계가 있다
그 다음으로 내부 클래스가 정태화되었기 때문에 Out.전체적으로 보면 내부 클래스를 직접 new로 내보낼 수 있는 대상(클래스 이름을 통해static에 접근하여 외부 클래스를 생성하지 않아도 상관없음)
실례 4: 개인 내부 클래스

class Out {
  private int age = 12;
   
  private class In {
    public void print() {
      System.out.println(age);
    }
  }
  public void outPrint() {
    new In().print();
  }
}
 
public class Demo {
  public static void main(String[] args) {
    // 
    /*
    Out.In in = new Out().new In();
    in.print();
    */
    Out out = new Out();
    out.outPrint();
  }
}
실행 결과: 12
만약 내부 클래스가 외부 클래스의 방법으로만 조작되기를 원한다면,private를 사용하여 내부 클래스를 설명할 수 있습니다
위의 코드에서, 우리는 Out 클래스에서 In 클래스를 생성하는 대상을 조작해야 하며, 더 이상 Out을 사용할 수 없습니다.In in = new Out().new In() 내부 클래스를 생성하는 객체
즉, 이때의 내부 클래스는 외부 클래스만 제어할 수 있다는 것이다
마치 나의 심장은 나의 몸으로만 통제할 수 있을 뿐 다른 사람들은 직접 그것을 방문할 수 없다
인스턴스 5: 메소드 내부 클래스

class Out {
  private int age = 12;
 
  public void Print(final int x) {
    class In {
      public void inPrint() {
        System.out.println(x);
        System.out.println(age);
      }
    }
    new In().inPrint();
  }
}
 
public class Demo {
  public static void main(String[] args) {
    Out out = new Out();
    out.Print(3);
  }
}
실행 결과:

십이
위의 코드에서 우리는 내부 클래스를 외부 클래스의 방법으로 옮긴 다음에 외부 클래스의 방법에서 내부 클래스 대상을 생성하여 내부 클래스 방법을 호출한다
만약 이때 우리가 외부 클래스의 방법에 파라미터를 전달해야 한다면, 외부 클래스의 방법은 반드시 final 정의를 사용해야 한다
final은 여기에 특별한 의미가 없고 단지 표현 형식일 뿐이다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기