일반적으로 사용하는 4 가지 형태의 Java 내부 클래스가 있습니다 : 일반 내부 클래스, 로컬 내부 클래스, 익명 내부 클래스 및 정적 내부 클래스. 다음은 다양한 내부 클래스의 특성을 설명하기 위해 작성한 테스트입니다.
내부 클래스의 특성과 관련하여 코드는 다음과 같이 자세히 설명됩니다.
/** java 내부 클래스 테스트** interobj 반사 결과 :** 개인 int i* private interobj $ intera ia* public interobj ()* public static void main (java.lang.string [])* private int geti ()* public void pp ()* public void pp ()* public void pp ()* public void pp ()* 공개 void ppp ()* public void ppp ()* 아래는 개인 속성 또는 메소드 패키지 레벨에 액세스하기위한 자동으로 생성 된 정적 메소드*/public class interobj {private int i = 8; private intera ia = null; public interobj () {interobj () {public int Geti () {return i; p () {pi (); pp (); ppp (); pppp (); pppp ();}/ * * 일반 내부 클래스에서는 "코트 클래스"의 모든 수준에서 메소드 및 속성에 액세스 할 수 있습니다. 재킷 클래스는 또한 "내부 클래스"의 어느 수준에서든 메소드와 속성에 액세스 할 수 있습니다. 내부 클래스는 코트 클래스 객체를 참조 할 수 있기 때문입니다. * 내부 클래스에서 액세스 해야하는 개인 메소드 및 속성의 경우 컴파일러는 * 개인 메소드 및 속성에 해당하는 "패키지"레벨 정적 메소드를 자동으로 생성합니다. 이러한 방법은 외부 클래스 객체를 * 매개 변수로 사용하여 "패키지"레벨 정적 메소드의 외부 클래스의 개인 메소드 및 * 속성에 액세스 할 수 있도록해야합니다. * 재킷 클래스가 내부 클래스에서 개인 메소드 및 속성에 액세스하는 것도 동일합니다. 내부 클래스가 컴파일되면 *는 재킷 클래스에서 액세스 해야하는 개인 메소드 및 속성에 해당하는 "패키지"레벨 정적 메소드를 생성합니다. * * intera 반사 결과 : * 개인 int ia * 아래의 내부 클래스가 보유한 코트 클래스 객체의 참조 * 최종 interobj이 $ 0 * COAT 클래스 객체를 생성자의 매개 변수로 사용하십시오 * interObj $ intera (interobj) * 개인 void pa () * 아래의 개인 void pa () * 공적 access accective에 액세스하기위한 정적 메소드 () * interobj $ 0 (interobj $ intera). pa1 () */class intera {private int ia = 9; private void pa () {system.out.println ( "this is isten is intera.pa : ia ="+ia+", interobj.i ="+geti ()) ia = "+ia+", interobj.i = "+geti ());}}/ * * 로컬 내부 클래스는 내부 메소드 만 보이며 다른 기능은 일반적인 내부 클래스와 동일합니다. * 액세스 해야하는 로컬 변수의 경우 로컬 내부 클래스가 외부 클래스 객체에 대한 참조를 보유 할 수 있지만 외부 클래스 방법의 로컬 변수에 액세스 할 수 없기 때문에 최종적으로 설정해야합니다. 모든 컴파일러는 로컬 내부 클래스에서 액세스 해야하는 로컬 변수의 사본을 "복사"합니다 (그러나 기본 유형 int, float 및 string *이 변경되지 않은 유형에 대한 사본은 없습니다). 외부 메소드의 변수 값에 의해 가리키는 복사 된 변수 값과 * 객체가 동일한 객체임을 보장하기 위해서는 로컬 클래스에서 사용하는 로컬 변수가 최종적으로 설정되어야하며 로컬 부품의 복사 된 변수와 외부 메소드의 변수가 동일한 객체를 가리 키야합니다. 변수 *를 최종으로 설정하면 변수가 가리키는 객체 주소가 변경 될 수없는 객체의 내부 속성보다는 변경되지 않은 상태로 유지됩니다. * * private int ib * 아래의 반사 결과는 내부 클래스가 보유한 코트 클래스 객체의 참조입니다. * 최종 interobj 아래 $ 0 * 아래는 내부 클래스가 보유한 외부 방법에서 로컬 변수 테스트 객체의 참조 사본입니다 * 개인 최종 테스트 * 개인 최종 테스트 *는 COAT 클래스 객체와 로컬 변수 검사를 구성 * InterObj $ 1 $ 1 $ Poid (interobj, interobj)에서 사용합니다. 이 컴파일러는 개인 속성 또는 메소드 패키지 레벨에 액세스하기위한 정적 메소드를 자동으로 생성합니다 * 정적 무효 액세스 $ 0 (interobj $ 1 $ interb) */public void pi () {최종 int = 5; 최종 테스트 = new test (); class int ib = 7; private void pb () {system.out.println ( "interb. ", (method) pi.s ="+s+", test.t ="+test.gett ());}} interb ib = new interb (); // 로컬 내부 클래스에서 참조 된 테스트 테스트의 내부 상태로 변경됩니다. // 결과가 ib.pb ()이라고 불리는 경우 출력은 변경된 값 100test.sett (100); ib.pb ();}/ * * "코트 클래스 객체"에 대한 참조가 필요하지 않을 때 사용됩니다. * * 인터 반사 결과 : (정적 내부 클래스는 코트 클래스 객체에 대한 참조가 없습니다) * private int ic * interc () * private void pc () */static class inter {private int ic = 6; private void pc () {system.out.println ( "이것은 inter.pc : ic ="+ic); * 내부 클래스*/public void pp () {intera ia = new intera (); ia.pa (); ia.pa1 (); interc ic = new interc (); ic.pc (); // 로컬 내부 클래스는 방법 // interb ib = new Interb (); * 코트 클래스 객체에서 참조 해야하는 내부 클래스 객체를 구성하는 "코트 클래스"를 지칭하는 정적 메소드에 객체가 없기 때문에 비 정적 내부 클래스를 구성 할 수 없습니다. */public static void ppp () {// intera ia = new intera (); // 그러나 다음과 같이 구성 될 수 있습니다 : interobj iobj = new interobj (); intera ia = iobj.new intera (); ia.pa (); ia.pa1 (); inter inter interb (); // visible 내부 (); ib = new interb ();}/ * * 익명의 내부 클래스 테스트 */public void pppp () {testinterface tif = new testinterface () {public void pppp () {system.out.println ( "testinterface.noname");}}; tif.ppp (); ib = 7, (방법) pi.s = 5, test.t = 100 * 이것은 intera.pa : ia = 9, interobj.i = 8 * intera.pa1 : ia = 9, interobj.i = 8 * intera.pc : 6 * intera.pa : ia = 9, interobj.i = 8 * intera.pa. interc.pc : ic = 6*testinterface.noname*/public static void main (string [] args) {interobj io = new interobj (); io.p ();}}/** 내부 클래스 생성을위한 인터페이스*/인터페이스 테스트 interface {public void ppp ();}/** 지역 내부 클래스*/클래스 테스트*/클래스 테스트 {/classe {classe {private int t test}; gett () {return t;} public void sett (int t1) {t = t1;}}또 다른 예를 공유하겠습니다.
공개 클래스 내부 클래스 {정적 장난감 장난감 = 새 장난감 () {문자열 이름 = "lao wu";@public void jump () {system.out.println (이름+"지구에서 나누기"); go ();}};/*내부 클래스*1. 멤버 내부 클래스 : *1.1 멤버 내부 클래스는 외부 클래스의 속성에 직접 액세스 할 수 있습니다 *1.2 외부 클래스 이름을 통해 외부 클래스의 현재 객체에 액세스하십시오. 이 방식 * 멤버 내부 클래스 인스턴스턴스 객체 : 외부 클래스 이름. 내부 클래스 이름 참조 이름 = 외부 클래스 객체. 내부 클래스 이름 (); *2. 정적 내부 클래스*2.1 외부 클래스의 멤버 리소스는 정적 내부 클래스 내부에서 액세스 할 수 없으며 클래스 이름*정적 내부 클래스 인스턴스티션 개체 : 외부 클래스 이름을 통해 외부 클래스의 정적 리소스에만 액세스 할 수 있습니다. 내부 클래스 이름 참조 이름 = 새 외부 클래스 이름. 내부 클래스 이름 (); *3. 로컬 내부 클래스 :*3.1 외부 클래스의 속성에 직접 액세스 할 수도 있습니다*3.2 외부 클래스의 현재 객체에 액세스 할 수도 있습니다*3.3 로컬 내부 클래스는 메소드 내부에서만 액세스 할 수 있으며 수정자는 기본값*4 일 수 있습니다. 익명의 내부 클래스 : 클래스의 특정 서브 클래스 인스턴스가 필요한 경우 * new Class Name () { * overwrite 메소드; *}; *4.1 익명의 내부 클래스는 외부 방법의 속성에 액세스하며,이 속성은 익명의 내부 클래스에 추가 된 새로운 속성 및 메소드로 변환되며 익명의 내부 클래스 **/public static void main (Strings) {person per = new = perent.computer pc = perputer pc =. 컴퓨터 ( "Alien"); person.computer pc1 = 새로운 사람 ( "Jian Zihao", 18) .new computer ( "alien"); pc.rungame (); pc1.rungame (); person.computer1 pc11 = new person.computer1 ( "인터넷 카페 컴퓨터"; "rokudou"; computer com = new Computer () {@public void rungame () {// todo auto-auto-regenated method stubsystem.out.println (per.age+"menery"+per.name+"lalalala demasita"); system.out.println (str);}; // anyous inter inc 클래스/*장난감 장난감 = 새로운 장난감 () {@override public void Jump () {System.out.println ( "지구에서 나누기"); }};*/toy.jump (); toy.jump (); // toy.go (); // system.out.println (toy.);}} 클래스 사람 {문자열 이름; int age; int age; int age1 = 18; static string name1 = "풀 타임 전문가"; public person (string name, int age); PlayGame () {system.out.println (이름+"게임 게임");} public class computer {문자열 이름; public computer (string name) {super (); this.name = name;} public void Rungame () {system.out.println (name+"run game"); system.out.println (age+"reperson. 정적 클래스 컴퓨터 1 {문자열 이름; public computer1 (string name) {super (); this.name = name;} public void rungame () {system.out.println (system.out.println (person.age1+""+person.name1+"재생 게임"); public void usecomputer () {computer usecomputer () {computer {string ()} {super (); this.name = name;} public void rungame () {system.out.println (name+"run game"); system.out.out.println (person.this.age+""+person.name+"게임");}} computer com = new Computer ( "Notebook");}}}}}}}}}}}} rungame ();} 공개 클래스 장난감 {public void jump () {System.out.println ( "Jump Toy");}}요약
위의 내용은이 기사에서 Java 내부 테스트 코드에 대한 자세한 설명입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!