1. 일반적인 선언 방법
==> 하나의 java 파일에 class 키워드를 작성하여 클래스 선언
2. 무명 클래스(anonymouns class) 선언
==> 이름이 없는 클래스 선언. interface를 객체 생성 시 많이 사용이 됨
3. 중첩 클래스(inner class) 선언
==> 클래스 안에 또 다른 클래스 선언
[내부 클래스의 특징]
<예시>
추상메서드를 만들 인터페이스 Inter클래스 생성
=============================코드=============================
public interface Inter {
// 추상메서드
int sum(int n1, int n2);
int minus(int n1, int n2);
}
Inter 인터페이스 클래스를 구현할 Sub클래스 생성

=============================코드=============================
public class Sub implements Inter {
@Override
public int sum(int n1, int n2) {
return n1 + n2;
}
@Override
public int minus(int n1, int n2) {
return n1 - n2;
}
}d
일반적인 선언 방법과 무명클래스 선언을 활용하여 메인메서드에 출력할 Inter_01 클래스를 생성

=============================코드=============================
public static void main(String[] args) {
// 1. 일반적인 객체 생성 선언 방법
Sub sub = new Sub();
System.out.println("sum() 메서드 호출 >>> " + sub.sum(200, 36));
System.out.println("minus() 메서드 호출 >>> " + sub.minus(200, 36));
// 2. 무명 클래스(anonymous class) 선언
Inter inter = new Inter() {
@Override
public int sum(int n1, int n2) {
return n1 + n2;
}
@Override
public int minus(int n1, int n2) {
// TODO Auto-generated method stub
return n1 - n2;
}
};
System.out.println("interface sum() >>> " + inter.sum(300, 237));
System.out.println("interface minus() >>> " + inter.minus(500, 238));
}

이번에는 중첩 클래스의 선언 방법에 대해 알아보자
Outer 외부 클래스와 Inner 내부 클래스 생성 후 내부 클래스에 메서드로 output() 호출
=============================코드=============================
class Outer { // 외부 클래스
final int su1 = 50; // final로 선언 시 상수가 되어 값 변경이 불가능!
private int su2 = 33;
class Inner { // 내부 클래스
void output() {
//su1 = 137; ==> 값을 넣을 시 변경된 값이 출력 됨 (단, final 선언 시 값 변경 x)
su2 = 133; // 외부 클래스에 su2를 private으로 선언해도 접근이 가능하다!(긴밀한 관계이기 때문)
System.out.println("su1 >>> " + su1);
System.out.println("su2 >>> " + su2);
}
} // Inner class end
} // Outer class end
public class Inner_02 {
public static void main(String[] args) {
// 중첩 클래스 객체 생성 방법
// 1. 외부 클래스 객체가 먼저 생성이 되어야 함
Outer outer = new Outer();
// 2. 내부 클래스 객체 생성
// 형식) 외부클래스명.내부클래스명 참조변수 = 외부클래스 참조변수.new 내부클래스 생성자();
Outer.Inner inner = outer.new Inner();
inner.output();
}
}
