중첩 클래스, 중첩 인터페이스
클래스 내부에 선언된 클래스, 인터페이스를 의미한다.
중첩을 사용하면 두 클래스간 맴버에 쉽게 접근이 가능하고 긴밀한 관계를 맺는것이 가능해진다.
package a13_NestedClass;
public class ClassA {
class ClassB{
}
interface InterfaceA{
}
}
1.중첩 클래스
인스턴스 멤버 클래스 | 객체를 생성해야지만 사용할수있는 클래스 |
정적 멤버 클래스 | 클래스에 바로 접근하여 사용할수있는 클래스 |
로컬 클래스 | 메소드가 실행되야 사용할수있는 클래스 |
package a13_NestedClass;
public class ClassA {
//인스턴스 맴버 클래스
class ClassB{}
//정적 맴버 클래스
static class ClassC{}
//로컬클래스
void method(){
class ClassD{}
}
}
1-1.인스턴스 맴버 클래스
인스턴스 맴버 클래스 내부에서는 static 키워드를 사용할수없고 떄문에 정적필드 정적 메소드를 선언할수없다.
1-1-1.인스턴스 맴버 클래스
package a13_NestedClass;
public class ClassA {
//인스턴스 맴버 클래스
class ClassB{
public void methodA(){
System.out.println("A");
}
}
}
1-1-2.인스턴스 맴버 클래스 사용
package a13_NestedClass;
public class a13 {
public static void main(String[] args){
ClassA a1 = new ClassA();
ClassA.ClassB b1= a1.new ClassB();
b1.methodA();
}
}
//출력
A
1-2.정적 멤버 클래스
정적 멤버 클래스 내부에는 모든 종류의 필드와 메소드를 선언할수있다.
별도의 A객체를 생성하지않고 C객체를 생성할수있다.
1-2-1.정적 인스턴스 맴버 클래스 사용
package a13_NestedClass;
public class ClassA {
//정적 맴버 클래스
static class ClassC{
public void methodA(){
System.out.println("A");
}
public static void methodB(){
System.out.println("B");
}
}
}
1-2-2.정적 맴버 클래스 사용
package a13_NestedClass;
public class a13 {
public static void main(String[] args){
ClassA.ClassC c1= new ClassA.ClassC();
ClassA.ClassC.methodB();
c1.methodA();
}
}
//출력
A
B
1-3.로컬 클래스
로컬클래스는 메소드 내에서만 사용가능하므로 접근제한자와 static 을 사용할수없다.
1-3-1.로컬 정적 맴버 클래스 사용
package a13_NestedClass;
public class ClassA {
//로컬클래스
void method(){
class ClassD{
public void methodA(){
System.out.println("A");
}
}
ClassD d1 = new ClassD();
d1.methodA();
}
}
1-3-2.로컬 맴버 클래스 사용
package a13_NestedClass;
public class a13 {
public static void main(String[] args){
ClassA a2 = new ClassA();
a2.method();
}
}
//출력
A
2.중첩 인터페이스
클래스 멤버로 선언 된 인터페이스다.
package a15_NestedInterface;
public class ClassA {
//중첩 인터페이스
interface Remote{
void method();
}
//인터페이스 타입필드
Remote remote;
//매개변수 다형성
void method1(Remote remote){}
//구현객체의 메소드 호출
void method2(Remote remote){remote.method();}
}
//구현클래스
class Tv implements ClassA.Remote{
@Override
public void method() {}
}
'Language > JAVA' 카테고리의 다른 글
[Java] 중첩클래스 접근 제한 (0) | 2024.05.19 |
---|---|
[Java] 인터페이스 다형성 (0) | 2024.05.17 |
[Java] 인터페이스 (0) | 2024.05.17 |