public class Job {
private String name;
// 열거 타입도 암시적 static
public enum Jobs {
STUDENT, TEACHER, POLICE, DESIGNER
}
public static class publicClass {
private int age;
public void method() {
Job outerClass = new Job();
System.out.println(outerClass.name); // 메소드가 public이므로 접근 가능하다.
}
}
private static class privateClass {
private int age;
public void method() {
Job outerClass = new Job();
System.out.println(outerClass.name); // 메소드가 private이므로 접근 불가하다.
}
}
}
바깥 클래스명.this
으로 바깥 클래스 메소드, 참조를 호출할 수 있다.public class MySet<E> extends AbstractSet<E> {
// ...생략
@Override public Iterator<E> iterator() {
return new MyIterator();
}
private class MyIterator implemnets Iterator<E> {
// ...
}
}
- 엔트리를 비정적 멤버 클래스로 표현하는 것은 낭비, 그러므로 private 정적 멤버 클래스가 알맞다.
- 상수 표현을 위해 초기화된 final 기본 타입과 문자열 필드만 가질 수 있다.
// 인터페이스 선언
public interface MyInterface {
// 추상 메서드 선언
public void do();
}
// 구현 클래스 정의
public class MyClass implements MyInterface {
@Override
public void do() {
System.out.println("MyClass의 do() 메서드 호출");
}
}
public class Example {
private int number;
public Example(int number) {
this.number = number;
}
public void method() {
// 지역변수처럼 선언해서 사용할 수 있다.
class LocalClass {
private String name;
public LocalClass(String name) {
this.name = name;
}
public void print() {
// 비정적 문맥에선 바깥 인스턴스를 참조 할 수 있다.
System.out.println(number + name);
}
}
LocalClass localClass = new LocalClass("local");
localClass.print();
}
}
Reference: