하나의 클래스에서만 사용될 경우 논리적으로 묶기 위해 중첩클래스로 선언한다.
캡슐화 증가
코드 가독성 증가
정적 클래스메소드와 마찬가지로 staic 중첩 클래스는 해당 클래스에 정의된 필드, 메소드를 직접 접근 할 수 없다.
public class OuterClass {
String outerField = "Outer field";
static String staticOuterField = "Static Outer field";
class InnerClass {
void accessMembers() {
System.out.println("outerField = " + outerField);
System.out.println("staticOuterField = " + staticOuterField);
}
}
static class StaticNestedClass {
void accessMembers(OuterClass outer) {
//System.out.println(outerField);//접근 불가
System.out.println(outer.outerField);
System.out.println(staticOuterField);
}
}
public static void main(String[] args) {
System.out.println("Inner class:");
System.out.println("------------");
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.accessMembers();
System.out.println("\nStatic nested class:");
System.out.println("--------------------");
StaticNestedClass staticNestedClass = new StaticNestedClass();
staticNestedClass.accessMembers(outerClass);
System.out.println("\nTop-level class:");
System.out.println("--------------------");
TopLevelClass topLevelClass = new TopLevelClass();
topLevelClass.accessMember(outerClass);
}
}
public class TopLevelClass {
void accessMember(OuterClass outer) {
//System.out.println(OuterClass.outerField);
System.out.println(outer.outerField);
System.out.println(OuterClass.staticOuterField);
}
}
→ 익명 객체를 공부하다보면 람다식이 같이 나오는데 람다식의 내용은 다음번에
new 부모생성자(매개값,...) {
}interface Animal {
String bark();
String run();
}
public class Main {
public static void main(String[] args) {
Animal dog = new Animal() {
@Override
public String bark() {
return "왈왈왈";
}
@Override
public String run() {
return "달린다 왈왈";
}
};
System.out.println(dog.bark());
System.out.println(dog.run());
}
}public class Main {
public static void main(String[] args) {
class User {
String name;
int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
User[] users = {
new User("홍길동", 32),
new User("김춘추", 64),
new User("임꺽정", 48),
new User("박혁거세", 14)
};
Arrays.sort(users, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return Integer.compare(o1.age, o2.age);
}
});
}
}[참고]
https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
https://inpa.tistory.com/entry/JAVA-☕-익명-클래스Anonymous-Class-사용법-마스터하기