아래 코드와 같이 클래스 내부에 있는 또다른 클래스를 말한다.
static 메소드 내부에서 객체를 생성하여 접근할 수 있는데, outter-class(현재 StudyJava)의 객체를 먼저 생성해주고, 아우터클래스의 객체를 이용하여 inner-class(현재 InnerClass)의 객체를 생성해주어야 한다.
public class StudyJava {
class InnerClass {
public void disp() {
System.out.println("멤버 이너 클래스 / InnerClass에 접근 완료!");
}
}
public static void main(String[] args) {
StudyJava sj = new StudyJava();
InnerClass ic = sj.new InnerClass();
ic.disp();
}
}
멤버 이너 클래스와 유사하나, 내부 클래스의 앞에 static 키워드가 붙는다. static 이라서 메인 메소드에서 객체 생성 방법이 달라진다.
public class StudyJava {
static class InnerClass { // ⭐ static inner class
public void disp() {
System.out.println("static 이너 클래스 / InnerClass에 접근 완료!");
}
}
public static void main(String[] args) {
StudyJava.InnerClass ic = new StudyJava.InnerClass(); //아우터클래스명.이너클래스명 객체
ic.disp();
}
}
멤버 이너 클래스가 클래스 내부(outter-class)에 선언된 또다른 클래스(inner-class)라면, Local Inner Class 는 메소드 안에 선언된 또다른 클래스를 말한다.
public class StudyJava {
public static void main(String[] args) {
class InnerClass {
public void disp() {
System.out.println("Local 이너 클래스 / InnerClass에 접근 완료!");
}
}
InnerClass ic = new InnerClass();
ic.disp();
}
}
인터페이스나 추상클래스를 일회성으로 구현할 때 사용하는 클래스.
abstract class Animal {
abstract void sound();
}
public class StudyJava {
public static void main(String[] args) {
Animal a = new Animal() { //추상 클래스의 객체 생성 과 동시에 { 중괄호 } 사용해서 내부에 오버라이딩
@Override
void sound() { //추상 메소드 구현
System.out.println("멍멍");
}
};
}
}