내부클래스
why?
-외부클래스에 쉽게 접근할 수 있다.
-코드가 더욱 간단해진다.
-서로 관련 있는 클래스를 논리적으로 묶어서 코드의 캡슐화를 증가시킨다.
1.중첩클래스(인스턴스 클래스)
- 외부클래스의 멤버변수 선언위치에 선언한다.
- 외부클래스의 인스턴스 멤버들과 사용할 목적으로 선언
ex)
public class InnerExam1{
class Cal{
int value = 0;
public void plus(){
value++;
}
}
public static void main(String args[]){
InnerExam1 t = new InnerExam1();
InnerExam1.Cal cal = t.new Cal();
cal.plus();
//생성된내부클래스 객체에서 레퍼런스를 통해 내부클래스의 메소드를 사용할 수 있다.
System.out.println(cal.value);
}
}
내부 클래스의 객체를 생성하기 위해서는 외부클래스의 객체를 먼저 생성한 뒤,
외부클래스.내부클래스(레퍼런스) 생성할 객체이름 = 생성한 외부클래스.new 내부클래스();
방식으로 선언하여 내부클래스 객체를 사용할 수 있다.
2.정적(static) 내부 클래스
- 외부클래스 멤버변수 선언위치에 선언한다.
- static멤버처럼 다루어진다.
ex)
public class InnerExam2{
static class Cal{
int value = 0;
public void plus(){
value++;
}
}
public static void main(String args[]){
InnerExam2.Cal cal = new InnerExam2.Cal();
cal.plus();
System.out.println(cal.value);
}
}
static 내부 클래스는 외부클래스의 객체를 생성할 필요없이
외부클래스.static내부 클래스 생성할 내부 클래스의 객체 이름 = new 외부클래스.static내부 클래스();
로 선언하면 된다.
3.지역 중첩 클래스
- 외부클래스의 메서드나 초기화 블럭안에 선언한다.
- 선언된 내부에서만 사용이 가능하다.
- static 멤버를 가질 수 없다
ex)
public class InnerExam3{
public void exec(){
class Cal{
int value = 0;
public void plus(){
value++;
}
}
Cal cal = new Cal();
cal.plus();
System.out.println(cal.value);
}
public static void main(String args[]){
InnerExam3 t = new InnerExam3();
t.exec();
}
}
*본 게시물은 프로그래머스<자바입문>강의를 복습하며 작성한 글입니다.
'JAVA' 카테고리의 다른 글
JAVA(2022.05.13)-Throws (0) | 2022.05.13 |
---|---|
JAVA(2022.05.12)-익명 클래스,Exception (0) | 2022.05.12 |
JAVA-(2022.05.10)-interface의 static 메소드 (0) | 2022.05.10 |
JAVA(2022.05.09)- interface의 default메소드 (0) | 2022.05.09 |
JAVA(2022.05.08)-클래스 형변환 , interface (0) | 2022.05.08 |