자바 내부 클래스
1. 내부 카테고리 란 무엇입니까?
한 클래스의 정의는 다른 클래스 내부에 배치 되며이 클래스는 내부 클래스라고합니다.
2. 내부 클래스의 특성은 무엇입니까?
1. 내면의 클래스는 여전히 독립 클래스입니다. 컴파일 후 내부 클래스는 독립적 인 .class 파일로 컴파일되지만 외부 클래스의 클래스 이름과 $ 기호가 선행됩니다.
2. 내부 클래스는 일반적인 방식으로 액세스 할 수 없습니다. 내부 클래스는 외부 클래스의 구성원이므로 내부 클래스는 비공개 여부에 관계없이 외부 클래스의 멤버 변수에 자유롭게 액세스 할 수 있습니다.
3. 내부 클래스가 정적으로 선언되면 외부 클래스의 멤버 변수에 마음대로 액세스 할 수 없습니다. 현재 내부 클래스는 외부 클래스의 정적 멤버 변수에만 액세스 할 수 있습니다.
3. 내부 카테고리는 무엇입니까?
1. 회원 내부 클래스
좋다:
package com.test01; public class a {// 내부 클래스 B는 testpojo를 상속 받고 testinterface 인터페이스 클래스 B를 확장합니다. testpojo empless {// 내부 클래스 B의 자체 메소드 public void run () {system.out.println ( "I 'm Running!"); } // 인터페이스 메소드를 다시 작성하여 public void testf () {System.out.println ( "인터페이스 구현!"); }} // 내부 클래스를 호출 공개 void test () {b b = new b (); b.testf (); // rewrite 인터페이스 메소드를 사용합니다. b.run (); // 자신의 방법을 호출합니다. b.testpojo (); // 상위 클래스를 상속하는 통화 메소드} // 메인 메소드 테스트 public static void main (String [] args) {a = new A (); a.test (); }} // 인터페이스 정의, 메소드는 testf () interface testinterface {public void testf ();} // 일반 클래스 메소드 정의 testpojo () class testpojo {public void testpojo () {system.out.println ( "i 간단한 pojo 클래스"); }} // 내부 클래스 클래스에서 메소드를 호출하려면 구현 {public static void main (String [] args) {ab b = new a (). new b (); // 클래스 A에서 내부 클래스 B를 호출하는 것 /**는 다음 코드와 동일합니다* a a = new A (); * AB B = A.New B (); * */ b.testf (); // rewrite 인터페이스 메소드를 사용합니다. b.run (); // 자신의 방법을 호출 b.testpojo (); // 부모 클래스를 물려받는 메소드 호출}}2. 방법 내부 클래스
package com.test01; public class pertest {public void test (). }}; 새로운 ne (). fle (); // 내부 클래스의 메소드 호출} public static void main (String [] args) {new pertest (). test (); //시험}} 참고 : (1) 내부 클래스 방법은 내부 클래스를 정의하는 메소드 내에서만 인스턴스화 할 수 있으며이 메소드 외부에서 인스턴스화 할 수 없습니다.
(2) 내부 클래스 객체는 내부 클래스가 위치한 방법의 비 결절 로컬 변수를 사용할 수 없습니다.
이 방법의 로컬 변수는 스택에 있기 때문에 방법의 수명 동안 만 존재합니다. 메소드가 끝나면 스택 구조가 삭제됩니다.
로컬 변수는 역사가됩니다. 그러나 메소드가 완료된 후에는 메소드 내에서 생성 된 내부 클래스 객체가 여전히 힙에 존재할 수 있습니다!
예를 들어, 참조가 다른 코드로 전달되고 멤버 변수에 저장된 경우. 로컬 변수는 내부 클래스 객체의 방법과 동일한 긴 수명을 보장 할 수 없기 때문에 내부 클래스 객체는이를 사용할 수 없습니다. (이 이해는 Baidu 백과 사전에서 온다)
3. 익명 내부 클래스
1) 초록 익명 내부 클래스
패키지 com.anyonymous; public class actractClass {public void test () {// 메소드는 testa a = new testa () {// extome class @override public void run () {// Abstract Class.out.println 구현 ( "Impact Anonymous Inner Class를 사용하고 있습니다"); }}; a.run (); // 내부 클래스의 메소드 호출} public static void main (String [] args) {new acpractClass (). test (); // test}} // 초록 클래스 정의 테스트 testa 초록 메소드는 run () 추상 클래스 testa {public acpract void run ();}2) 익명 내부 클래스 인터페이스
package com.anonymous; public class testanonymous {myinterface m = new myinterface () {// 인터페이스 구현 공개 void eat () {// myinterface interface method.out.println ( "식사를하고 있습니다!"); }}; public void ss () {// method ss m.eat (); // 덮어 쓰기 메소드를 호출} public static void main (string [] args) {new TestAnonymous (). ss (); // test}} // 인터페이스 메소드를 eatInterface로 정의합니다. myinterface {public void eat ();}참고 : 익명의 내부 클래스는 메소드 또는 클래스 멤버 내에서 정의 할 수 있습니다. 익명의 내부 수업이든 외부 클래스에서 직접 호출 할 수는 없습니다.
4. 내부 카테고리의 역할은 무엇입니까?
각 내부 클래스는 구현 (인터페이스)에서 독립적으로 상속 될 수 있으므로 주변 클래스가 특정 구현 (인터페이스)을 상속했는지 여부는 내부 클래스에 영향을 미치지 않습니다. 내부 클래스가 여러 콘크리트 또는 추상 클래스를 물려받을 수있는 능력이 없으면 일부 설계 및 프로그래밍 문제를 해결하기가 어렵습니다. 이러한 관점에서, 내부 클래스는 여러 상속의 솔루션을 완성합니다.
인터페이스는 일부 문제를 해결하는 반면 내부 클래스는 "다중 상속"을 효과적으로 구현합니다.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!