머리말
클로저는 생성 된 범위에서 일부 정보를 기록하는 호출 가능한 객체입니다. 이 정의를 통해 내부 클래스는 주변 클래스 객체 (내부 클래스 생성 범위)에 대한 정보를 포함 할뿐만 아니라 주변기 클래스 객체에 대한 참조를 갖기 때문에 내부 클래스가 객체 지향적 인 폐쇄임을 알 수 있습니다. 이 역할에서 내부 클래스는 개인 회원을 포함한 모든 회원을 운영 할 권리가 있습니다.
Java에서 가장 논란의 여지가있는 문제 중 하나는 Java가 콜백을 허용하기 위해 포인터와 같은 메커니즘을 포함해야한다는 것입니다. 콜백을 통해 객체는 나중에 초기 객체를 호출 할 수있는 정보를 전달할 수 있습니다. 콜백이 포인터를 통해 구현되면 프로그래머가 포인터를 오용하지 않기를 바랍니다.
1. 내부 멤버 클래스
내부 수업은 회원으로 간주 될 수 있습니다. 멤버 내부 클래스는 모든 멤버 속성 및 외부 클래스의 멤버 방법에 무조건 액세스 할 수 있습니다.
클래스 외부 클래스 {// 외부 클래스 개인 int = 0; 정적 int Inn = 4; 공개 외부 클래스 (int in) {this.in = in; } class InnerClass {// 내부 클래스 public void output () {system.out.println (in); System.out.println (Inn); }}}멤버 내부 클래스가 외부 클래스와 동일한 이름의 멤버 변수 또는 메소드를 소유 한 경우, 멤버 내부 클래스의 구성원은 기본적으로 액세스합니다. 동일한 외부 클래스 이름의 멤버에 액세스하려면 다음 형식으로 액세스해야합니다.
외부 클래스 (외부 클래스)
외부 클래스가 내부 클래스에 액세스하면 먼저 멤버 내부 클래스의 객체를 작성한 다음이 객체에 대한 참조를 통해 액세스해야합니다.
클래스 외부 클래스 {private int in = 0; 정적 int Inn = 4; 공개 외부 클래스 (int in) {Innerclass Inner = new Innerclass (); this.in = inner.innernum; } 클래스 내부 클래스 {// 내부 클래스 public int innernum = 1; public void output () {system.out.println (in); System.out.println (Inn); int a = outterclass.this.inn; }}}멤버 내부 클래스는 외부 클래스를 기반으로 존재합니다. 즉, 멤버 내부 클래스의 객체를 만들려면 외부 클래스의 객체가 존재해야한다는 전제입니다. 멤버 내부 클래스 객체를 만드는 일반적인 방법은 다음과 같습니다.
public class class {public static void main () {outterclass oc = new interclass (3); interclass.innerclass in = oc.new innerclass (); }} 2. 로컬 내부 카테고리
로컬 내부 클래스는 방법의 로컬 변수와 같으며 public , protected , private 및 static 수정자를 가질 수 없습니다.
클래스 외부 클래스 {public interclass (int in) {클래스 내부 클래스 {// 로컬 내부 클래스 intnernum = 1; }}} 3. 중첩 된 내부 클래스
중첩 된 내부 클래스는 static 으로 수정 된 내부 클래스입니다. static 으로 선언 된 내부 클래스는 내부 클래스 객체와 외부 클래스 객체 사이의 연결이 필요하지 않습니다. 즉, outer.inner 를 직접 참조 할 수 있습니다.
Class interclass {public interclass (int in) {} 정적 클래스 내부 클래스 {// 로컬 내부 클래스 intnernum = 1; }} public class class {public static void main () {outterclass.innerclass in = new outterClass.innerClass (); }} 4. 익명 내부 범주
익명의 내부 클래스는 이름을 밝히기를 원하지 않기 때문에 가장 많이 사용하는 클래스입니다. 따라서 익명 성이 있습니다. 익명의 내부 클래스는 미리 정의해야합니다.
btnsan.setonclicklistener (newonclicklistener () {@override publicvoidonclick (view v) {}}); 5. 클로저 및 콜백
클로저는 호출 할 수있는 객체로, 생성하는 범위에 대한 정보를 저장합니다. Java는 폐쇄를 명시 적으로 지원할 수 없지만 Java에서는 "인터페이스 + 내부 클래스"를 통해 클로저를 구현할 수 있습니다.
예를 들어 인터페이스 프로그래머와 기본 클래스 작가는 동일한 방법 work 과 동일한 메소드 이름을 가지고 있지만 그 의미는 완전히 다릅니다. 현재 폐쇄가 필요합니다.
클래스 라이터 {// Writer Base Class void work () {};} 인터페이스 프로그래머 {// 프로그래머 인터페이스 void work ();} 폐쇄 구현 코드는 다음과 같습니다.
Public Class WriterProgrammer는 Writer {@override public void work () {// writing} public void code () {// write code} 클래스 프로그래머 implements 프로그래머 {@override public void work () {code (); }}} 서브 클래스에서 프로그래머의 인터페이스 규칙을 따르는 내부 클래스가 정의 된 다음 내부 클래스는 프로그래머의 work() 메소드 콜백 code() 메소드를 구현하고 서브 클래스에서 부모 클래스 작성자의 work() 메소드를 직접 구현합니다.
6. 내부 범주의 역할
내부 클래스는 숨기기 위해 잘 구현 될 수 있습니다.
일반적으로 비 내부 클래스는 private 및 protected 권한을 허용하지 않지만 내부 클래스는
내부 클래스는 주변 클래스의 모든 요소에 액세스 할 수 있습니다.
그러나 여러 상속이 달성됩니다
동일한 클래스에서 인터페이스를 수정하고 동일한 이름의 두 가지 메소드 호출을 구현하지 않을 수 있습니다.
7. 요약
위는이 기사의 전체 내용입니다. 모든 사람이 자바를 배우거나 사용하는 데 도움이되기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다.