한 패키지에서 여러 클래스를 사용하는 경우 클래스의 이름을 일일이 지정해주는 것보다 패키지명.*과 같이 하는것이 편리하다 ☛ IDE의 import정리기능을 써서 사용할 클래스들을 명시적으로 import 것이 좋다. import만 보면 어떤 클래스들을 쓰는지(dependency)를 쉽게 파악할 수 있기 때문.
4.2 static - 클래스의, 공통적인 p.344
static의 사전적 의미 : 정적인, 변하지 않는
Nothing is static. Everything is evolving.(Chuck Palahniuk, Fight Club)
4.3 final - 마지막의, 변경될 수 없는
모든 private 메소드는 final이다 하지만 모든 final 메소드가 private인 것은 아니다. p.353
4.4 abstract - 추상의, 미완성의
추상 클래스를 상속extend하는 구상 클래스는 모두 abstract 메소드를 override해야 한다
VS
인터페이스를 구현implement하는 클래스는 모두 메소드를 override해야 한다
언제 abstract를 써야 하는가?
언제 interface를 써야 하는가?
composition over inheritance vs inheritance over composition
4.6 제어자(modifier)의 조합
메서드에 private와 final을 같이 사용할 필요는 없다. (중략) 이 둘 중 하나만 사용해도 의미가 충분하다 ☛ private 메소드에 final 제어자를 쓸 필요는 없다. 하지만 final 메소드에 접근 제어자를 지정하지 않는다면 접근 제어자는 default가 된다. 즉 private가 아니다.
5. 다형성
5.1 다형성이란?
5.2 참조변수의 형변환
5.3 instanceof 연산자
5.4 참조변수와 인스턴스의 연결
메서드의 경우 조상 클래스의 메소드를 자손의 클래스에서 오버라이딩한 경우에도 참조변수의 타입에 관계없이 항상 실제 인스턴스의 메서드(오버라이딩된 메서드)가 호출되지만, 멤버변수의 경우 참조변수의 타입에 따라 달라진다.