문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
프로그램:java:ㄴhomework:book_source:ch10 [2022/01/04 10:56] clayeryan@gmail.com 만듦 |
프로그램:java:ㄴhomework:book_source:ch10 [2023/07/13 17:29] (현재) clayeryan@gmail.com ↷ 문서가 programmer:java:ㄴhomework:book_source:ch10에서 프로그램:java:ㄴhomework:book_source:ch10(으)로 이동되었습니다 |
||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ====== | + | ====== |
+ | |||
+ | ===== 내부클래스 ===== | ||
+ | |||
+ | **내부(중첩)클래스의 구조** | ||
+ | |||
+ | class 클래스명 { | ||
+ | class 내부 클래스명 { | ||
+ | ... | ||
+ | } | ||
+ | } | ||
+ | |||
+ | **멤버 클래스의 파일명** | ||
+ | |||
+ | 바깥클래스명$내부클래스명.class | ||
+ | |||
+ | **로컬 클래스 파일명** | ||
+ | |||
+ | 바깥클래스명$1내부클래스명.class | ||
+ | |||
+ | : | ||
+ | |||
+ | public class Outer { | ||
+ | // Outer 클래스의 내용 | ||
+ | ... | ||
+ | | ||
+ | // Inner 클래스의 내용 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | 다른 곳에서 Inner클래스 객체를 생성하기 위해 Inner클래스에 접근할 시 | ||
+ | |||
+ | Outer.inner inn = new Outer.Inner(); | ||
+ | |||
+ | :wr: <color # | ||
+ | |||
+ | public class Outer { | ||
+ | // Outer 클래스의 내용 | ||
+ | ... | ||
+ | | ||
+ | // Inner 클래스의 내용 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | 다른 곳에서 안쪽 클래스의 객체를 생성할 시 - 바깥 클래스의 객체를 먼저 생성하고, | ||
+ | |||
+ | Outer outer = new Outer(); | ||
+ | Outer.Inner inn = outer.new Inner(); | ||
+ | |||
+ | <color # | ||
+ | |||
+ | <code java> | ||
+ | package chapter10; | ||
+ | |||
+ | public class LocalInnerEx { // 바깥클래스 | ||
+ | int i=10; | ||
+ | |||
+ | void outerMethod(){ | ||
+ | class Inner { // 로컬 클래스 | ||
+ | int x=20; // 메서드 지연변수 | ||
+ | int i=30; // 메서드 지역변수 | ||
+ | void innerMethod() { | ||
+ | System.out.println(x); | ||
+ | System.out.println(i); | ||
+ | System.out.println(this.i); | ||
+ | System.out.println(LocalInnerEx.this.i); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | Inner inn = new Inner(); | ||
+ | inn.innerMethod(); | ||
+ | } | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | LocalInnerEx lic = new LocalInnerEx(); | ||
+ | lic.outerMethod(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | **A.java** | ||
+ | |||
+ | <code java> | ||
+ | package chapter10; | ||
+ | |||
+ | class A { // 바깥 클래스 | ||
+ | A() { // 바깥 클래스의 생성자 | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | static class B { // static 내부 클래스 | ||
+ | B() { // static 내부 클래스의 생성자 | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | int var1; | ||
+ | static int var2; | ||
+ | |||
+ | void method1() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | static void method2() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public class C { // 인스턴스 내부 클래스 | ||
+ | C() { // 인스턴스 내부 클래스의 생성자 | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | int var1; | ||
+ | |||
+ | void method1() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | void method() { // 바깥 클래스의 메서드 | ||
+ | |||
+ | class D { // 로컬 내부 클래스 | ||
+ | D() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | int var1; | ||
+ | |||
+ | void method1() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | D d = new D(); | ||
+ | d.var1 = 3; | ||
+ | d.method1(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **Amain.java** | ||
+ | |||
+ | <code java> | ||
+ | package chapter10; | ||
+ | |||
+ | public class Amain { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | A a = new A(); | ||
+ | |||
+ | //static 멤버 클래스 객체 생성 | ||
+ | A.B b = new A.B(); | ||
+ | b.var1 = 3; | ||
+ | b.method1(); | ||
+ | A.B.var2 = 3; | ||
+ | A.B.method2(); | ||
+ | |||
+ | // | ||
+ | A.C c = a.new C(); | ||
+ | c.var1 = 3; | ||
+ | c.method1(); | ||
+ | |||
+ | //로컬 클래스 객체 생성을 위한 메소드 호출 | ||
+ | a.method(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== 내부 인터페이스 ===== | ||
+ | |||
+ | **내부 인터페이스 구조** | ||
+ | |||
+ | class 클래스명 { | ||
+ | | ||
+ | void method(); // 추상 메서드 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | <code java> | ||
+ | package chapter10.interfacePkg; | ||
+ | |||
+ | public class Outer { | ||
+ | |||
+ | interface InterfaceEx { | ||
+ | void method(); | ||
+ | } | ||
+ | |||
+ | InterfaceEx ie; | ||
+ | |||
+ | void setInterfaceEx(InterfaceEx ie) { | ||
+ | this.ie = ie; | ||
+ | } | ||
+ | |||
+ | void outerMethod() { | ||
+ | ie.method(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package chapter10.interfacePkg; | ||
+ | |||
+ | public class InterfaceExImple implements Outer.InterfaceEx{ | ||
+ | |||
+ | @Override | ||
+ | public void method() { | ||
+ | |||
+ | System.out.println(" | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package chapter10.interfacePkg; | ||
+ | |||
+ | public class InterfaceExImple2 implements Outer.InterfaceEx{ | ||
+ | |||
+ | @Override | ||
+ | public void method() { | ||
+ | |||
+ | System.out.println(" | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package chapter10.interfacePkg; | ||
+ | |||
+ | public class OuterMain { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Outer out = new Outer(); | ||
+ | |||
+ | out.setInterfaceEx(new InterfaceExImple()); | ||
+ | out.outerMethod(); | ||
+ | out.setInterfaceEx(new InterfaceExImple2()); | ||
+ | out.outerMethod(); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||