일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 예외처리
- Annotaion
- 상속
- array
- statement
- DB연동
- where
- transient
- JDBC
- Oracle
- 난수
- 다이얼로그
- Serializable
- 오라클
- Transaction
- 16bit
- Reader
- 8bit
- Connection
- swing
- java
- driver
- DB
- 조회
- stream
- Join
- InputStream
- set
- select
- 자바
- Today
- Total
오버플로
[Java] Inner Class / Nested Class / Local Class / Anonymous Inner Class 본문
[Java] Inner Class / Nested Class / Local Class / Anonymous Inner Class
NACO 2021. 7. 27. 21:471. Inner Class
- 안쪽 클래스를 instance variable처럼 사용할 때 쓰임
- 안쪽 클래스의 접근지정자는 public으로 설정
- 안쪽 클래스는 바깥 클래스의 자원을 마음대로 사용하나,
바깥 클래스는 안쪽 클래스의 자원을 사용하기 위해 반드시 객체화를 하여 사용
- Compile 후 byte code : 바깥클래스명.class
바깥클래스명$안쪽클래스명.class
- 객체화 방법 :
1) 바깥 클래스를 객체로 생성 : 바깥클래스명 객체명 = new 바깥클래스생성자();
2) 안쪽 클래스를 객체로 생성 : 바깥클래스명.안쪽클래스명 객체명 = 바깥클래스의 객체명.new 안쪽클래스생성자();
2. Nested Class
- 안쪽 클래스를 static 변수처럼 사용할 때 쓰임
- 안쪽 클래스 / 내부 변수 / method는 static을 붙여서 만듦
(중첩클래스의 자원은 객체화없이 바로 사용 가능하도록 static으로만 구성함)
- 안쪽 클래스에서 바깥 클래스의 instance 영역은 사용할 수 없음!
(instance영역을 사용하고 싶으면 객체화하여 사용하는 inner class를 쓰자)
- Compile 후 byte code : inner class와 같음
- static 방식으로 사용) 클래스명.변수명, 클래스명.method명
3. Local Class – 지역클래스
- 클래스를 method의 지역변수처럼 사용할 때 (클래스를 method안에서 생성하고 사용할 때 씀)
- 생성된 class는 method 호출이 종료되면 메모리에서 사라짐
- 안쪽 클래스와는 다르게 method 외부에서는 지역 클래스를 절대로 사용할 수 없음
- Compile 후 byte code : 바깥클래스명.class
바깥클래스명$1지역클래스명.class
(여기서 1은 method명. method명은 byte code에 반영되지 않음)
- 객체화 방법 : method 안에서 Local Class를 객체화
: Local class명 객체명 = new Local Class 생성자()
4. Anonymous Inner Class
- class를 arguments(method의 입력 값, 인수)로 사용
- 참조형 데이터형이 매개변수로 된 method를 호출할 때 사용
- 별도의 클래스를 작성하지 않아도 참조형데이터형을 매개변수로 선언한 method 호출 가능
- 문법) method명 ( new 부모클래스생성자() {
method Override { } ,,,
}
)//method
- Compile 후 byte code : 바깥클래스명.class
바깥클래스명$1.class
# 오늘의 코딩 #
Anonymous Inner Class 연습!
package test;
/**
* 부모클래스 : 상속 및 abstract <br>
* @author user
*/
public abstract class AbsParents {
public AbsParents() {
System.out.println("부모클래스 생성자");
}// AbsParents
/**
* 집에서 밥을 먹는 method - 자식에 의해 구현될 method<br>
*/
public abstract void eat();
}//class
- 간단하게 어제 사용했던 abstract method의 부모 클래스를 가져왔다. anonymous class 에서 구현될 abstract method는 집에서 밥먹기!
package test;
/**
* Anonymous Inner Class 구현할 Class<br>
* AbstractParents의 메소드를 자식클래스 생성 없이 바로 구현<br>
* @author user
*/
public class UseAnonyClass {
public void anonyTest(AbsParents ap) {
ap.eat(); // 집에서 밥먹는 abstarct method
}// anonyTest
public static void main(String[] args) {
UseAnonyClass anony = new UseAnonyClass();
anony.anonyTest(new AbsParents() {
@Override
public void eat() {
System.out.println("집에서 밥을 먹자");
}
});// method
}// main
}// class
- 자식클래스 파일을 별도로 만들지 않고 사용하는 클래스 내에서 anonymous class 를 구현했다.
- Use Class에서 부모 추상 클래스를 매개변수로 받고(참조형 데이터형)
method 호출을 위해 부모인 추상 클래스의 method를 Override하였다.
# 출력 결과 #
부모클래스 생성자
집에서 밥을 먹자
>> 부모인 추상 클래스와 method가 생성되어 잘 구현되는거 확인!
'Java' 카테고리의 다른 글
[Java] Date Class / SimpleDateFormat Class / Locale Class (0) | 2021.08.01 |
---|---|
[Java] StringTokenizer (0) | 2021.07.30 |
[Java] Math Class (0) | 2021.07.29 |
[Java] Interface (0) | 2021.07.28 |
[Java] Overloading / Overriding / Annotaion / Abstract Class (0) | 2021.07.26 |