목록이것이 자바다 (108)
충분히 쌓여가는
중첩 클래스 내부에서 this는 해당 중첩 클래스의 객체를 말한다 만약 중첩 클래스 내부에서 바깥 클래스의 객체를 얻으려면 바깥 클래스 이름에 this를 붙여주면 된다 package ch09.sec05.exam02; public class A { String field = "A-field"; void method() { System.out.println("A-method"); } class B { String field = "B-field"; void method() { System.out.println("B-method"); } void print() { //B 객체의 필드와 메소드 사용 System.out.println(this.field); this.method(); //A 객체의 필드와 메소드 사..
중첩 클래스는 바깥 클래스와 긴밀한 관계를 맺으면서 바깥 클래스의 멤버(필드, 메소드)에 접근할 수 있다 하지만 중첩 클래스가 어떻게 선언되었느냐에 따라 접근 제한이 있을 수 있다 바깥 클래스의 멤버 접근 제한 인스턴스 멤버 클래스 바깥 클래스의 모든 필드와 메소드 정적 멤버 클래스 바깥 클래스의 정적 필드와 정적 메소드 정적 멤버 클래스는 바깥 객체가 없이도 사용 가능해야 하므로 바깥 클래스의 인스턴스 필드와 인스턴스 메소드는 사용하지 못한다
로컬 클래스 생성자 또는 메소드 내부에서 선언된 클래스 public class A { //생성자 public A() { class B { } //로컬 클래스 } //메소드 public void method() { class B { } //로컬 클래스 } } 로컬 클래스에는 일반 클래스와 같이 필드, 생성자, 메소드 선언이 올 수 있다 정적 필드와 정적 메소드는 Java 17부터 선언 가능 로컬 변수 생성자 또는 메소드의 매개변수 또는 내부에서 선언된 변수 로컬 변수를 로컬 클래스에서 사용할 경우 로컬 변수는 final 특성을 갖게 되므로 값을 읽을 수만 있고 수정할 수 없게 된다 이것은 로컬 클래스 내부에서 값을 변경하지 못하도록 제한하기 때문 Java 8 이후부터는 명시적으로 final 키워드를 붙이지..
인스턴스 멤버 클래스는 다음과 같이 A 클래스의 멤버로 선언된 B 클래스를 말한다 pulbic class A { public|private class B { } } 인스턴스 멤버 클래스 B는 주로 A 클래스 내부에서 사용되므로 private 접근 제한을 갖는 것이 일반적 B 객체는 A 클래스 내부 어디에서나 생성할 수 없고, 인스턴스 필드값, 생성자, 인스턴스 메소드에서 생성할 수 있다 A 객체가 있어야 B 객체도 생성할 수 있기 때문 package ch09.sec02.exam01; public class A { //인스턴스 멤버 클래스 class B {} //인스턴스 필드 값으로 B 객체 대입 B field = new B(); //생성자 A() { B b = new B(); } //인스턴스 메소드 vo..