19일차 강의 정리


1. 내부클래스 (클래스 안의 클래스)

소스1

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
public class Ex03 {    
    
    static class Inner03{    //내부클래스
        static int a=100;
        int b=50;
        static class Inin03{
            static int a=10;
        }
        public Inner03(){    //내부클래스 생성자
        }
        
        static void func01(){
            System.out.println("Inner class func01() call");
        }
        void func02(){
            func();
            System.out.println("Inner class func02() call");
        }
        
    }//Inner03 class end
    
    public static void main(String[] args) {
        
//        com.hb.am.Ex03 me = new com.hb.am.Ex03();    //패키지 경로가 숨겨져있다
//        com.hb.am.Ex03.func();        //패키지 경로,내클래스명 숨겨있다
        Ex03.Inner03.func01();
        Inner03 in = new Inner03();    //내부클래스 객체생성
        in.func02();
        System.out.println(Ex03.Inner03.a);
        System.out.println(in.b);    //non-static
        System.out.println(Ex03.Inner03.Inin03.a);    //static 이면 접근 쉽다
        
    }//main end
 
    public static void func(){
        System.out.println("Ex03 class func02() call");
    }//func() end
 
}//Ex03 class end
cs

결과1

소스2

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
public class Ex04 {    
    int a = 4;
    int b = 5;
 
    class Inner04{    //내부클래스
        int a=100;
//        static int b=50;    //static은 class가 static일경우에 사용가능
        
        public Inner04(){    //생성자
        }
        void func01(){
            System.out.println("Inner04 class func01()");
            System.out.println("Ex04-b :"+b);
            func02();
        }
//        static void func02(){
//            System.out.println("Inner04 class func02()");
//        }
    }
    
    public static void main(String[] args) {
        Ex04 me = new Ex04();
        Ex04.Inner04 inme;
        inme = me.new Inner04();        //Inner클래스의 생성자 객체 생성
        System.out.println(inme.a);        //Inner클래스의 변수 출력
        inme.func01();                    //Inner클래스의 메소드 호출
        
    }//main end
    
    public void func02(){
        System.out.println("Ex04 class func02");
    }
 
}
cs

결과2

2. 로컬클래스 (메소드 안의 클래스)

소스

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
42
43
44
public class Ex05 {
    int a=5;
    public Ex05(){    }    //Ex05 생성자
    
    public static void main(String[] args) {
        Ex05 me = new Ex05();
        me.func01();
        me.func02(4);
 
    }//main end
 
    void func01(){
        System.out.println("Ex05-func01()");    
    }
    
    void func02(final int m){    //인자도 상수화시키면 LocalC에서 사용가능
        System.out.println("Ex05-func02()");
        int i=10;    //LocalC에서 사용이 불가능(but 상수화(final)시키면 가능
        
        //LocalClass
        class LocalC{
            int i=11;    //오류가 나지 않는다
            LocalC(){
                
            }
            void func03(){
                System.out.println("로컬class-func03()-"+m);    //인자를 받은 지역변수를 사용할수없다(자바 ver.1.8에서는 가능)
            }
            void func04(){
                System.out.println("로컬class-func04()-"+a);    //필드 사용가능
            }
            void func05(){
                System.out.println("로컬class-func04()-"+i);    
            }
        }//LocalC class end
        
        LocalC inn = new LocalC();
        inn.func03();
        inn.func04();
        inn.func05();
        
        return;        //return 해서 메인에서 사용하고싶은 경우에 interface를 사용해서한다(소스 가져오기!!)
    }//func02() end
}//Ex05 class end
cs

결과


'* Programming > JAVA' 카테고리의 다른 글

DAY20 this/super  (0) 2016.08.02
DAY19 익명클래스  (0) 2016.08.02
DAY19 예외처리2  (0) 2016.08.01
숫자 입력시 천단위 정규식  (0) 2016.08.01
DAY18 예외처리  (0) 2016.08.01

+ Recent posts