자바에서 상속이란 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소이다.
상속은 상위 클래스와 하위 클래스로 나누어 상위 클래스의 멤버(필드, 메서드, 이너 클래스)를 하위 클래스와 공유하는 것을 의미한다.
class Animal {
public Animal(){
System.out.println("동물");
}
}
public class Cat extends Animal{
public Cat(){
System.out.println("고양이");
}
public static void main(String[] args) {
Cat cat1=new Cat(); //cat1 객체 생성
}
}
결과
동물
고양이
자바는 "다중상속"을 지원하지 않는다.
다중상속이란 부모클래스가 두개 이상 존재할 수 있다는 것인데, 자바에서는 이를 지원하지 않는다.
interface Animal {
void speak(); // Animal 인터페이스에 speak라는 메서드를 추상 메서드로 정의
}
public class Cat implements Animal {
public Cat() {
System.out.println("고양이");
}
public void speak() {
System.out.println("야옹");
}
public static void main(String[] args) {
Cat cat1 = new Cat();
cat1.speak();
}
}
결과
고양이
야옹
ex)
public class Son implements Father, Mother{...}
메소드나 변수를 '구현'하는가 그대로 '사용'하는가에 따라서 상속의 형태가 갈리게 된다.
extends는 부모 클래스를 상속하기 위한 키워드이고, implements는 구현할 인터페이스를 불러오기 위한 키워드이다.
지난 글에서 본 내용을 떠올리면 자바에서 클래스는 다중 상속이 불가능하지만 인터페이스는 여러 개를 불러올 수 있다고 한다.
따라서 extends 뒤에는 하나의 클래스만 작성해야하며, implements 뒤에는 여러 개의 인터페이스를 작성해도 된다.
요약하자면
extends : 클래스 상속을 위해 사용하는 키워드
- 하나의 클래스만 상속 가능.
- 두 개 이상의 클래스 상속을 시도하면 에러 발생한다.
implements : 인터페이스 구현을 위해 사용하는 키워드
- 여러 개의 인터페이스를 불러올 수 있다.
- 불러온 인터페이스의 모든 메소드를 재정의해서 사용해야 한다.