1. 내부(inner) 클래스
두 클래스의 멤버에 쉽게 접근할 수 있다.
* 최근에는 가독성도 떨어지고 코드가 복잡해져서 많이 안쓰는 듯
public class OuterClass{
int num = 0;
String str1 = "java";
static String str11 = "world";
public OuterClass(){
System.out.println("생성자");
}
class InnerClass{
int num = 100;
String str2 = str1;
public InnerClass(){
System.out.println("InnerClass 생성자");
}
}
static class SInnerClass{
int num = 1000;
String str3 = str11;
public SInnerClass(){
System.out.println("static InnerClass 생성자");
}
}
}
public class MainClass{
public static void main(String[] args){
OuterClass oc = new OuterClass();
System.out.println(oc.num + " " + oc.str1);
OuterClass.InnerClass in = oc.new InnerClass();
System.out.println(in.num + " " + in.str2);
OuterClass.SInnerClass si = new OuterClass.SInnerClass();
System.out.println(si.num + " " + si.str3);
}
}
//출력 결과
생성자
0 java
InnerClass 생성자
100 java
static InnerClass 생성자
1000 world
2. 익명 클래스
이름이 없는 클래스로 주로 메서드를 재정의하는 목적으로 사용된다.
public class AnonymousClass {
public AnonymousClass(){
System.out.println("생성자");
}
public void method(){
System.out.println("익명클래스 메서드");
}
}
public class Main{
public static void main(String[] args){
new AnonymousClass(){
@Override
public void method(){
System.out.println("익명클래스 재정의 메서드");
}
}.method();
}
}
//실행결과
생성자
익명클래스 재정의 메서드
이름이 없다는 의미는
Parent p = new Parent(); 와 같의 선언부에서 'p'라는 이름을 주지 않고
바로 new 클래스(){ [메서드].method()} 로 한번 호출하고 버리는 용도이다.
728x90
반응형
'개발자 :-) > Java' 카테고리의 다른 글
[Java] 추상클래스 (0) | 2022.09.03 |
---|---|
[Java] 인터페이스 (0) | 2022.09.03 |
[Java] 상속 (0) | 2022.09.03 |
[Java] 데이터 은닉 (0) | 2022.09.03 |
[Java] 클래스 로더(Class Loader) (0) | 2022.09.03 |
댓글