1. 내부 클래스(inner class)
-우리가 만든 클래스 안에 또 하나의 클래스를 만든 것
-외부 클래스에서는 안쪽 클래스를 객체화 하여 그 객체로 안쪽 클래스의 자원을 사용한다.
-내부 클래스에서는 바깥쪽 클래스의 자원을 직접 사용 가능하다.
public class outer{
public class inner{ //내부 클래스
}
}
package ClassInner_nested_local_anonymouse;
public class InnerClass {
int i;
public InnerClass() {
System.out.println("바깥클래스 생성자");
}
public void outMethod() {
System.out.println("바깥 클래스의 메서드");
}
//--------------------- inner class start
public class Inner{
int j;
public Inner() {
System.out.println("안쪽 클래스의 생성자");
}
public void inMethod() {
System.out.println("안쪽클래스의 생성자");
System.out.println("안쪽 메서드 바깥변수" + i);
}
} //---------------------inner class end
public static void main(String[] args) {
InnerClass t1 = new InnerClass();
t1.i = 10;
// t1.j = 10; 안쪽 클래스의 변수는 직접 사용이 불가능
// t1.inMethod(); 안쪽 클래스의 메서드는 직접 사용이 불가능
// 바깥 클래스에서 안쪽클래스의 자원을 사용하려면 안쪽 클래스를 객체화 하여 사용
InnerClass.Inner in = t1.new Inner();
//안쪽 클래스의 자원 사용
in.j = 100;
in.inMethod();
} //main
} // class
2. Nested Class(중첩 클래스)
- 안쪽 클래스를 static 변수처럼 사용이 가능합니다.
- 안쪽 클래스 정의시 static 붙여서 정의 합니다.
- 외부 클래스 instance 영역은 사용할 수 없습니다.
- 안쪽 클래스는 객체화하지 않고 사용합니다.(static)
package ClassInner_nested_local_anonymouse;
public class NestedClass {
int i;
static int j;
public NestedClass() {
System.out.println("외부클래스의 생성자");
}
public void outMethod() {
System.out.println("인스턴스메서드");
}
public static void outStaticMethod() {
System.out.println("외부 클래스의 스태틱메서드");
}
// --------------중첩 클래스 시작
static class Nested{
static int n;
public Nested() {
System.out.println("안쪽 생성자");
}
public static void inMethod() {
// i= 10; //static영역에서는 instance 영역의 자원을 직접 사용할 수 없음.
System.out.println("안쪽 메서드");
NestedClass.j=10;
//outMethod(); //static영역에서는 instance영역의 자원을 직접 사용할 수 없음.
NestedClass.outStaticMethod();
}//inMethod
}//class
//--------------------중첩클래스 end
public static void main(String[] args) {
Nested.n=10;
Nested.inMethod();
}
}
3. 지역 클래스 (Local Class)
- 메소드 안에서 클래스를 정의할 때
- 메소드 내부에서만 지역변수처럼 클래스를 사용할 때
- 지역 클래스는 instance 변수, method를 사용할 수 있지만 지역변수, parameter는 final이 붙은 것만 사용가능.
- 메소드 바깥에서 사용할 수 없다. (지역변수 처럼)
package ClassInner_nested_local_anonymouse;
public class LocalClass {
int out_i;
public LocalClass() {
System.out.println("바깥 클래스 생성자");
}
public void method(int param_i, final int param_j) {
int local_i= 0;
final int local_j = 0;
//지역클래스 시작
class Local{
int i;
public Local() {
System.out.println("지역 클래스의 생성자");
}
public void localMethod() {
System.out.println("외부 클래스의 인스턴스변수= "+out_i);
//final이 붙어 있지 않은 파라미터는 지역클래스에서 사용할 수 없다.
//system.out.println("파라미터 param_i="+param_i);
System.out.println("파라미터 param_j= "+param_j);
//final이 붙어 있지 않은 클래스는 지역클래스에서 사용할 수 없다.
//System.out.println("지역변수 local_i"+local_i);
System.out.println("지역변수 local_j= "+local_j);
System.out.println("지역클래스의 메소드");
}
}
Local local = new Local();
local.i=10;
local.localMethod();
}
public static void main(String[] args) {
LocalClass lc = new LocalClass();
lc.method(100, 200);
}
}
4. 익명 클래스
Test t1 = new Test(){
public int num = 10;
@Override
public int getNum(){
return this.num;
}
};
익명 클래스 참조 : https://mommoo.tistory.com/16
'2020 > 신입 개발자 면접 질문 모음' 카테고리의 다른 글
구로 모 SI기업체의 면접 테스트 기초내용(변수, 데이터 타입) 기출 (0) | 2020.05.16 |
---|---|
자바 가상 기계(JVM)이란? (0) | 2020.05.16 |
신입개발자 면접 질문 # 클래스 변수, 인스턴스 변수, 지역변수 (0) | 2020.03.26 |
면접 질문 # 다형성 (0) | 2020.03.26 |
개발자 면접질문 # 트랜잭션이란 (0) | 2020.03.25 |