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 |