기존클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다. 기존에 정의되어 있던 클래스의 필드와 메서드들을 물려받아 새로운 클래스를 생성할 수 있다.
이때 기존의 클래스를 부모클래스, 상위클래스, 기초클래스라고 한다. 상속을 통해 새롭게 작성되는 클래스를 자식클래스, 하위클래스, 파생클래스라고 한다.
단 상위클래스에 정의된 private접근제한자를 둔 멤버 및 메서드는 하위클래스가 물려받을 수 없다.
두 클래스간의 관계가 is - a관계일 경우
예1)
컴퓨터 - 데스크탑
컴퓨터 - 노트북
예2)
자동차 - k3
자동차 - 세단
상속받을 클래스뒤에 extends <부모클래스이름>
public class Notebook extends computer {
...
}
부모로부터 물려받은 메서드가 자식클래스에서 사용하기에 완전히 적절하지 않거나 수정해야할 부분이 있을 경우 사용한다.
// method overriding
// 부모클래스로부터 상속받은 메서드가 자식클래스에서 사용하기 좋게 만드는 법
// 상속받은 메서드와 똑같은 이름의 메서드를 만들어서 덮어쓰기
public String toString() {
// super를 사용하여 부모클래스의 메서드를 불러올 수 있다
// super로 접근을 하면 private멤버들을 접근할 수 있다.
String result = super.toString() +
"\nScreen size: " + screenSize + "inches" +
"\nWeight: " + this.weight;
// 단순한 방법으로 아래와 같이 할 수 있지만 이미 부모클래스에서 코딩한 내용을 중복함으로 좋은 방법은 아니며 private멤버일 경우 접근제한이 걸린다.
// String result = "Manufacturer: " + manufacturer +
// "\nCPU: " + processor +
// "\nRAN: " + ramSize + " megabytes" +
// "\nDisk: " + diskSize + " gigabytes" +
// "\nProcessor speed: " + processor + " gigahertz" +
// "\nScreen size: " + screenSize + "inches" +
// "\nWeight: " + this.weight;
return result;
}