다형성 : 객체들이 동일한 메시지를 받아도 각 개체의 타입에 따라 다르게 동작하는 것
오버라이딩 : 실행 타임 다형성 (동적 바인딩)
오버로딩 : 컴파일 타임 다형성 (정적 바인딩)
오버라이딩은 실행 타임 다형성이기 때문에, 컴파일 타임 확인 + 가독성을 위해 오버라이딩 하는 메소드 위에 @Override 에너테이션을 붙이는게 좋다.
업캐스팅된 객체 메소드 호출 시 서브 클래스에 오버라이딩된 메소드가 무조건 실행된다
static 메소드는 오버라이딩 할 수 없다. 자식 클래스는 부모 클래스의 static 메소드를 포함하지않고 (단 접근은 할 수 있다), 자식 클래스에서 선언한 static 메소드는 별개의 메소드로 상우 클래스의 static 메소드를 '숨기는' 역할을 한다.
예외 처리 시 주의점 : 예외 발생 시 throw하면 자원이 반납되지 않을 수 있기 때문에, finally 블록에서 자원 반납을 한다.
또는 자바 7이상부터 AutoClosable 인터페이스를 구현한 클래스에 대해 try-with-resources를 통해 반납할 수도 있다.
try (자료형 변수 = 초기값) {
...
}
아래는 자주 발생하는 예외들이다. 익숙해지도록 하자.