java/코드 리뷰

10. oop10 - (1) Outer Demo (내부 클래스)

Astaroth아스 2020. 4. 3. 08:46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package oop10;
 
// 인스턴스 내부클래스
 
public class Outer1 {
    
    int x;
    static int y;
    void m1() {
        Inner1 i = new Inner1(); // 외부 클래스의 멤버 메서드에서 내부 클래스 사용 가능
    }
    
    static void m2() {
//        Inner1 i = new Inner1(;) // 외부 클래스의 클래스 메서드에서 내부 클래스 사용 불가
    }
    
    // 인스턴스 내부 클래스
    class Inner1 {
        int a;
//        static int b; // 클래스 변수 선언 불가
        void m3() {}
//        static void m4() {} // 클래스 메서드 선언 불가
        
        void m5() {
            System.out.println(x); // 외부 클래스의 멤버변수
            System.out.println(y); // 외부 클래스의 클래스 변수
            m1(); // 외부 클래스의 멤버 메서드
            Outer1.m2(); // 외부 클래스의 클래스 메서드
            System.out.println(a); // 자신의 멤버변수
            m3(); // 자신의 멤버 메서드
        }
        
    }
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package oop10;
 
// 스태틱 내부클래스
 
public class Outer2 {
    
    int x;
    static int y;
    void m1() {
        Inner2 i = new Inner2(); // 외부 클래스의 멤버 메서드에서 내부 클래스 사용 가능
    }
    
    static void m2() {
        Inner2 i = new Inner2(); // 외부 클래스의 멤버 메서드에서 내부 클래스 사용 가능
 
    }
    
    static class Inner2 {
        int a;
        static int b; // 클래스 변수 선언 가능
        void m3() {}
        static void m4() {} // 클래스 메서드 선언 가능
 
        void m5() {
//            System.out.println(x); // 멤버 변수 사용 불가
            System.out.println(Outer2.y);
//            m1(); // 멤버 메서드 사용 불가
            Outer2.m2();
        }
        
    }
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package oop10;
 
// 로컬 내부클래스
 
public class Outer3 {
    int x;
    static int y;
    void m1() {}
    static void m2() {}
    
    void m3() {
        
        int a = 10;
        int b = 10;
        final int c = 10;
        
        b = 20;
        
        class Inner3 {
            int 가; // 값이 한번도 바뀌지 않았음
//            static int 나; // 클래스 변수 정의 불가
            void m4() {} // 원래 값을못 구 함
//            static void m5() {} // 클래스 메서드 정의 불가
            
            void m6() {
                System.out.println(x); // 외부 클래스의 멤버 변수
                System.out.println(y); // 외부 클래스의 클래스 변수
                m1();                   // 외부 클래스의 멤버 메서드
                Outer3.m2();           // 외부 클래스의 클래스 메서드 
                System.out.println(a); // 내부 클래스가 정의된 메서드의 변수
//                System.out.println(b); // 내부 클래스가 정의된 메서드의 변수, 값 변하면 오류
                System.out.println(c); // 내부 클래스가 정의된 메서드의 상수
            }
            
            Inner3 i = new Inner3();
            //i.m6();
            
        }
    }
}