19일차 강의 정리


1. 익명클래스(Anonymous Class)

익명이란 이름이 없는 것을 의미 - 한번만 사용하고 버려지는 객체를 사용할때 유용

참조할 수 있는 참조변수가 없어서 객체가 생성되고 두번다시 객체에 접근불가

클래스 이름이 없어서 생성자 또한 없다

- 인터페이스

소스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
public class Ex01 {
 
    interface Inner{
        int a=11;
        void inFunc01();
        void inFunc02();
    }
    
    public static void main(String[] args) {
        // 익명클래스-찍어낸 객체만필요 ,이름이 필요없다.
        Ex01 me = new Ex01();
        Inner inn = me.func01();
        inn.inFunc01();
        inn.inFunc02();
        System.out.println(inn.a);
 
    }//main end
    public Inner func01(){
        System.out.println("func01 start");
        System.out.println("func01 end");
        return new Inner(){
            int a=88;        //(자료,정보)은닉성
            public void inFunc01(){
            System.out.println(a+"내부클래스의 메소드 호출1");    
            }
            @Override
            public void inFunc02() {
                System.out.println(a+"내부클래스의 메소드 호출2");    
            }
        };
    }//func01() end
 
}//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
interface Anony01{
    void func01();
}
 
public class Ex02 {
    public static void main(String[] args) {
        Anony01 me = new Anony01(){
            @Override
            public void func01(){
                System.out.println("인터페이스를 통한 객체 생성1");
            }
        };        //;반드시 필요
        me.func01();
        
        System.out.println("----------------------------------");
        new Anony01(){
            @Override
            public void func01(){
                System.out.println("인터페이스를 통한 객체 생성2");
            }
        }.func01();
    
    }//main end
 
}//class end
cs

결과2


- 추상클래스

소스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
abstract class Anony02{        //추상클래스
    int a=1000;
    public Anony02(){}
    void func02(){
        System.out.println("추상클래스입니다");
    }
    abstract void func02(int a);
    
}
 
public class Ex02 {
    public static void main(String[] args) {
 
        System.out.println("----------------------------------");
        Anony02 me2 = new Anony02(){//생성자를 호출하면서 구현도 함께하기위해{};한다
            int a=4;                    //필드는 공용값 사용하지말아라 여기서
            void func02(int a){        //구현과 실행문장
                System.out.println("인자"+a+",,"+this.a+"를 전달 받은 추상클래스의 메소드");
            }
        };        //객체 생성
        me2.func02();    //참조변수(객체의 주소)를 통해서 기능 호출
        me2.func02(3);
        System.out.println(me2.a);        
    }//main end
 
}//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
abstract class Am03 extends Object{
    String msg="super";
    public Am03(){
        super();
        System.out.println("Am03 class 생성자 호출");
    }
    void func01(){
        System.out.println("추상class(Am03) func03()");
    }
    abstract void func02();        //추상 메소드
}
 
public class Ex03 {
    
    public static void main(String[] args) {
        Am03 me = new Am03(){
            String msg="this";    //이것을 가리킬수있는 방법이없다(필드는 오버라이드가 되지않아서)
            @Override
            void func02() {
                System.out.println("자식class 재정의func03()");                
            }
            void func03(){}        //없는 기능 구현해도 사용x
            
        };
        me.func01();
        me.func02();
        System.out.println("msg:"+me.msg);
    }//main end
}//Ex03class end
cs

결과2



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

DAY20 Object클래스,리플렉션  (0) 2016.08.02
DAY20 this/super  (0) 2016.08.02
DAY19 내부클래스,로컬클래스  (0) 2016.08.01
DAY19 예외처리2  (0) 2016.08.01
숫자 입력시 천단위 정규식  (0) 2016.08.01

+ Recent posts