부모 클래스에 만들어진 필드와 메소드를 자식 클래스가 물려 받는 것
자식 클래스는 부모 클래스에 만들어진 필드와 메소드를 만들지 않고도 만든 것과 같은 효과를 가짐
주의할 점은 상속은 클래스 사이의 상속이지 객체 사이의 상속이 아님
상속을 선언 할 때 확장한다는 뜻을 가진 extends 키워드 사용
자식 클래스와 부모 클래스는 각각 생성자를 가지며, 각각의 멤버 기능을 각각 수행
자식 클래스의 객체가 생성되면 객체 속에 자식 클래스의 멤버와 부모 클래스의 멤버가 모두 들어 있음
부모 클래스의 생성자가 먼저 실행 한 후 자식 클래스의 생성자가 실행 됨
자식 클래스의 객체에 대한 레퍼런스를 부모 클래스 타입으로 변환하는 것
업 캐스팅과 반대로 개념이며, 다운캐스팅 시 명시적으로 타입 변환을 지정해야 함
부모 클래스와 자식 클래스의 메소드 사이에 발생하는 관계로서, 부모 클래스에 선언된 메소드와 같은 이름, 같은 리턴 타입, 같은 매개 변수 리스트를 메소드를 자식 클래스에서 재 작성 하는 것
메소드 오버라이딩은 ‘부모 클래스 메소드 무시하기 혹은 덮어 쓰기’ 로 표현 가능, 이란 처리를 동적 바인딩이라고 함
상속을 통해 ‘하나의 인터페이스에 서로 다른 내용 구현’이라는 객체 지행의 다향성을 실현하는 도구
실행할 메소드를 컴파일 시에 결정 하지 않고 실행 시 결정하는 것
super 키워드를 이용하면 정적 바인딩을 통해 부모 클래스의 멤버에 접근 가능
오버라이딩과 달리 한 클래스나 상속 관계에 있는 클래스들 사이에 메소드의 이름은 같지만, 매개변수 타입이나 개수가 다르게 메소드를 작성하는 경우
선언은 되어 있으나 코드가 구현되어 있지 않은, 즉 껍데기만 있는 메소드
추상 메소드를 포함한 클래스
추상 메소드가 없지만 abstract로 선언한 클래스
추상 클래스는 객체를 생성할 수 없음
추상 클래스를 단순히 상속받는 자식 클래스는 추상 클래스
추상 클래스의 구현이란, 부모 클래스에 선언된 모든 추상 메소드를 자식 클래스에서 오버라이딩 하여 실행 가능한 코드로 구현하는 것
추상 클래스의 목적은 추상 메소드를 통해 자식 클래스가 구현할 메소드를 명료하게 알려주는 인터페이스의 역할을 하고, 자식 클래스는 추상 메소드를 목적에 맞게 구현하는 다형성을 실현
추상 클래스를 이용하면 응용프로그램의 설계와 구현을 분리하는 것
계층적 상속 관계를 가지는 클래스들의 구조 만들기 위함
interface 키워드를 사용하여 클래스를 선언하듯이 선언하는 것
인터페이스 구현이란 implements 키워드를 사용하여 인터페이스의 모든 추상 메소드를 구현하는 클래스를 작성하는 것
콤마를 이용하여 다중 인터페이스 구현 가능
상속을 통해 기존 인터페이스에 새로운 규격을 추가한 새로운 인터페이스를 만들 수 있으며, 인터페이스의 상속은 extends 키워드 사용
클래스는 인터페이스를 상속 받을 수 없음
구현한 내용이 서로 다른 클래스 선언하므로서 다형성 실현
인터페이스는 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 구격 선언이며, 클래스의 다형성을 실현하는 도구
추상 클래스의 목적
추상 클래스는 자식 클래스에서 필요로 하는 대부분의 기능을 구현하여 두고 자식 클래스에서 상속 받아 활용할 수 있도록 하되, 자식 클래스에서 구현 할 수 밖에 없는 기능만 추상 메소드로 선언하여,
자식 클래스에서 구현도록 하는 목적
인터페이스의 목적
인터페이스는 객체의 기능을 모두 공개한 표준화 문서와 같은 것으로, 개발자에게 인터페이스를 상속 받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적
참조 : 명품 JAVA Programming 개정 4판