사진은 베르사유의 그랑 트리아농 방 중 하나 - 방마다 다른 색으로 꾸며져있다
생성자는 반복 학습으로 익숙해져 있는 상태였지만, 종합 퀴즈를 풀면서 리턴 타입이 상관없다는 부분을 까먹고 있던거 보니까 다시 정리해야겠다! 내부 클래스는 공부한 기억이 없어서 조금 생소했다. 변수들 유효 범위가 아직 제대로 와닿지 않아서 직접 코딩해보며 좀더 익혀야겠다.
컴파일 결과:
컴파일 에러가 난다...
=> 매개변수가 있는 생성자 만들때는 매개변수 없는 디폴트 생성자도 꼭 만들어주는게 나음!
+) 오버로딩에는 반환타입 상관이 없다!
=> 생성자는 반환값이 없으니까 상관없지만 기억하기!
this()
: 자신이 속한 클래스에서 다른 생성자 호출//사용 예시
class Student{
private double id;
public Student(){
System.out.println("학생 생성!");
}
public Student(double id){
this(); //다른 생성자 호출
this.id = id; //클래스의 id 속성 값을 지역 변수 id로 초기화
}
}
class Outer { // 외부 클래스
class Inner {
// 인스턴스 내부 클래스
}
static class StaticInner {
// 정적 내부 클래스
}
void run() {
class LocalInner {
// 지역 내부 클래스
}
}
}
=> 정적 내부 클래스만 static
이라서 외부전역 변수에만 접근 가능
(인스턴스 변수 접근 ❌)
=> 나머지 클래스들은 외부 인스턴스 변수, 외부 전역 변수 모두 접근 가능
멤버 내부 클래스: 인스턴스 내부 클래스, 정적 내부 클래스
지역 내부 클래스: 클래스 메서드 내에 정의되는 클래스
클래스 메서드 안에서는 this() 호출 불가능! (this는 인스턴스 자기 자신 가리키는 거니까)
정적 내부 클래스는 외부 클래스의 존재와 무관하게 정적 변수 사용 가능
//정적 이너 클래스의 객체 생성
Outer.StaticInClass a = new Outer.StaticInClass();
a.test();