본문 바로가기
개발자 :-)/Java

[Java] 내부클래스와 익명클래스

by 뚜생첨 2022. 9. 3.

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

댓글