추상 메서드와 추상 클래스
추상 메서드: 선언부는 있으나 구현부가 없는 메서드
추상 클래스 내에 선언될 수 있다.
만약 울어보세요() 메소드를 가진 Animal클래스를
여러 동물들이 상속받아 각각 다르게 울도록 구현한다면
Animal클래스에서의 울어보세요()는 어떻게 구현해야 할까?
이럴 때 추상 메서드를 선언한다.
static 블록
클래스도 생성자와 비슷한 역할을 하는 static블록이 있다.
public class 동물 {
static {
println 월월!
}
}
만약 동물 클래스를 사용하는 코드가 있다면 해당 클래스가 코드에서 맨 처음 사용될 때 static영역에 로딩되며, 그때 딱 한번 static 블록이 실행된다.
그러나 동물 클래스가 사용되지 않는다면, 동물 클래스는 T메모리의 static 영역에 자리잡지도 않고, static블록 역시 실행되지 않는다.
static블록 내에서는 static 멤버만을 사용할 수 있다. 객체가 생성되기 전에는 접근할 수 없기 때문이다.
❓왜 클래스는 처음 사용될 때 static 영역에 로딩될까❓
-> 스태틱 영역도 메모리이므로, 늦게 사용하고 빨리 반환하는 것이 좋다.
(그러나 자바의 static 영역에 한번 올라가면 프로그램 종료시까지 메모리 반환이 불가능하다)
final 키워드
final + 클래스
상속을 허락하지 않으므로 하위 클래스를 만들 수 없다.
final + 변수
변경 불가능한 상수가 된다.
final + 메서드
재정의(오버라이딩)이 금지된다.
interface + implements
인터페이스는 public 추상 메서드와 public 정적 상수만을 가질 수 있다.
따라서 public과 abstract 등을 붙이지 않아도 자동으로 자바가 붙인다.