내부클래스

이상해씨·2023년 5월 8일
0

JAVA

목록 보기
35/40

내부 클래스

  • 내부 클래스 : 클래스 내부에서 선언된 클래스
  • 클래스 종류
    1) 중첩 클래스, 인스턴스 클래스
    2) 정적중첩 클래스, static 클래스
    3) 지역 중첩 클래스, 지역클래스
    4) 익명클래스

1) 중첩 클래스, 인스턴스 클래스

  • 클래스 안에 필드 선언하는 위치에 선언되는 클래스
 public class InnerExam1{
        class Cal{
            int value = 0;
            public void plus(){
                value++;
            }
        }

        public static void main(String args[]){
            InnerExam1 t = new InnerExam1(); // Inner Exam 1이 생성되어야 내부의 클래스또한 호출할 수 있다. 
            InnerExam1.Cal cal = t.new Cal();
            cal.plus();
            System.out.println(cal.value);

        }
    }

2) 정적중첩 클래스, static 클래스

  • 필드 선언 시 static field 로 선언
 public class InnerExam2{
        static class Cal{
            int value = 0;
            public void plus(){
                value++;
            }
        }

        public static void main(String args[]){
			//Inner Exam이 생성되지 않아도, 내부의 클래스를 호출할 수 있다. 
            InnerExam2.Cal cal = new InnerExam2.Cal();
            cal.plus();
            System.out.println(cal.value);

        }
    }

3) 지역 중첩 클래스, 지역클래스

  • 메소드 내부에서 클래스 선언
  • 메소드 안에서 클래스를 사용할 수 있음.
  • 메소드 안에서 지역변수처럼 사용가능.
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();
        }
    }

4) 익명클래스

  • 익명클래스, 내부 클래스
  • 추상클래스를 만들면 추상 클래스 내부에 사용될 메소드를 자식클래스가 구현
  • Action 상속받는 클래스를 굳이 만들 필요가 없는 경우 사용(한번만 클래스 내부에서 사용하고 다른 곳에서는 사용하지 않는 경우)
    //추상클래스 Action 
    public abstract class Action{
        public abstract void exec();
    }

    //추상클래스 Action을 상속받은 클래스 MyAction

    public class MyAction extends Action{
        public void exec(){
            System.out.println("exec");
        }// 부모클래스의 메소드 구현
    }

    //MyAction을 사용하는 클래스 ActionExam 
    public class ActionExam{
        public static void main(String args[]){
            Action action = new MyAction();
            action.exec();
        }
    }

    //MyAction을 사용하지 않고 Action을 상속받는 익명 클래스를 만들어서 사용하도록 수정해 보도록 하겠습니다.
    public class ActionExam{
        public static void main(String args[]){
            Action action = new Action(){
                public void exec(){
                    System.out.println("exec");
                }
            };
            action.exec();
        }
    }

참고

profile
공부에는 끝이 없다

0개의 댓글