상속 = 부모가 자식에게 물려주는 행위
부모 클래스 = 상위 클래스, 자식 클래스 = 파생 클래스
class Child extends Parents {
// 필드
// 생성자
// 메서드
}
메소드 오버라이딩: 상속된 메소드의 내용이 자식 클래스에 맞지 않을 경우, 자식 클래스에서 동일한 메소드를 재정의하는 것을 말한다.
final 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 된다 ⇒ 부모 클래스가 될 수 없음.
메소드 선언시 final 키워드를 붙이면 이 메소드는 최종적인 메소드가 되어 오버라이딩할 수 없게 됨.
다형성: 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질(?) → 바로 눈에 들어오진 않네..좀 더 읽어봐야겠음
클래스 타입의 변환은 상속 관계에 있는 클래스 사이에서 발생한다. 자식 타입은 부모 타입으로 자동 타입 변환이 가능하다.
프로그램 실행 도중 자동으로 타입 변환이 일어나는 걸 말함.
부모 타입으로 자동 타입 변환된 후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능함.
강제 타입 변환 = 부모타입을 자식타입으로 변환하는 것. 정확히 말하자면 자식 타입에서 부모 타입으로 변환된 것이 다시 자식 타입으로 변환할 때 강제 타입 변환할 수 있음.
자식클래스 변수 = (자식클래스) 부모클래스타입;
추상(abstract) = 실체 간에 공통되는 특성을 추출한 것.
추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없다. 다시 말해 추상 클래스는 new 연산자를 사용해서 인스턴스를 생성시키지 못함 → 공통되는 필드와 메소드를 추출해서 만들었으므로, new 연산자를 사용해서 인스턴스를 생성하지 못한다라? 잘 이해가 안된다. 그냥 그런 것이라고 이해하고 넘어가면 되는 건가?
추상 메소드는 추상 클래스에서만 선언할 수 있고 메소드의 선언부만 있고 메소드의 실행 내용인 중괄호 {} 가 없다.