진행하고 있는 프로젝트에서 상속의 개념을 처음 써보게 되었다. 하지만 c++로 이론 수업만 들었던 것이 다였기 때문에 자바의 상속개념을 정리해본다.
상속은 부모 클래스를 자식 클래스에게 물려준다, 코드 중복을 줄일 수 있다 등 많이 알고 있을 것이다. 자바의 상속 방식을 알아보자.
자바 클래스 간의 상속은 여러 개의 부모를 상속하는 다중 상속 방식을 제외하고는 모두 허용한다.
extends를 사용한다.
class 부모class {
}
class 자식 extends 부모 {
}
예제
class people{
//필드
String name;
Long age;
//메소드
public void printMyself() {
sout("이름: " + name);
sout("나이: " + age);
}
}
class students extends People {
//필드
Long drinkCapacity;
//생성자
Student(String name, int age, Long drinkCapacity) {
super.name = name; // 부모필드
super.age = age; // 부모필드
this.drinkCapacity = drinkcapacity;
}
//메소드
public void printDrinkCapacity() {
sout("나의 주량: " + drinkCapacity);
}
}
public class Main {
public static void main(String[] args) {
Student student = new Student("김준식", 20, 5);
student.printMyself(); //부모 메소드 호출
student.printDrinkScore(); //자식 메소드 호출
}
예시 코드에서 super 키워드는 자식 클래스에서 부모 클래스를 가리킬 때 사용한다.
default 접근제한자를 잘 모르겠으면 여기!
예를 들어 상속 받은 여러 개의 부모 클래스들에서 동일한 명칭의 필드나 메소드가 있다면 어떤 클래스를 상속받고 어떤 클래스에 어떻게 접근하는 지 모호함이 생긴다. 따라서 자바에서는 다중 상속이 불가하다.
그럼 자바에서는 다중 상속을 아예 쓸 수 없을까 ?
자바의 인터페이스는 객체의 사용방법을 가이드라인 하는 것이다.
코드에서 먼저 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다.
인터페이스끼리 상속을 통해서 확장이 가능하다.
인터페이스로 객체 구현시 implements라는 키워드를 사용, 인터페이스끼리 상속 시 extends 키워드를 사용한다.
실제 예시는 현재 프로젝트에 인터페이스를 통한 상속을 하고 있어 추후에 정리할 예정이다..!
상속은 확장, 조상의 멤버를 그대로 자식이 물려받아 추가한다. 즉 자식으로 내려갈수록 조상보다 멤버의 범위가 더 넓어지는 느낌이다. 인터페이스는 확장의 의미보다는 인터페이스에서 정의된 것을 클래스에서 대신 구현하겠다는 느낌으로 받아들이면 될 것 같다.
출처 : 코드 팩토리 상속
코드 팩토리 인터페이스