상속이란 자식 클래스(Sub Class)가 부모 클래스(Super Class)의 기능을 그대로 물려받아
사용할 수 있는 것을 말한다.
객체지향 프로그래밍에서 상속은 중요한 개념이므로 잘 숙지하자.
상속의 장점
1. 코드의 중복성이 제거된다.
자식 클래스들의 공통적인 성분을 뽑아 부모 클래스에서 한번만 정의하기 때문에 코드가 간결해진다.
또한 상속받은 자식 클래스를 사용할 때 부모 클래스의 메서드를 마치 본인의 메서드처럼 사용할 수 있기 때문에 편리하다.
2. 다형적 표현이 가능하다 (=다형성)
1개의 객체를 여러 가지 모양으로 표현할 수 있는 특성을 다형성이라고 한다.
'대학생은 사람이다.', '직장인은 사람이다'와 같이 '사람' 이라는 객체를 다양하게 표현이 가능하다.
코드가 간결해지는 것도 있지만, 상속의 가장 큰 장점은 다형성이다. 우리는 하나의 객체를 다양하게 표현할 수 있게 되었기 때문에 확장성이 좋아졌고, 클래스 간의 계층적 분류 및 관리가 가능하여 유지보수성이 좋다.
상속의 특징
상속은 일반적으로 클래스 간의 관계가 명확하게 IS-A일 때 사용하는 것이 좋다. 애매하게 Is Like a 관계가 되지 않도록 주의해야 한다.
1. 자바의 클래스는 단일상속이 원칙이다. 다중상속이 불가능하다.
자바는 모든 것을 명확히 해야하는 언어다. 다중상속을 허용하면 모호성(ambiguous)이 발생하기 때문에 허용하지 않는다. 자식 클래스는 하나의 부모 클래스만 가질 수 있다. (자식은 몇개이든 상관없다.)
- 인터페이스는 다중상속이 가능하다.
2. 자바에서 계층구조의 최상위에는 java.lang.Object 클래스가 있다.
자바에서 모든 클래스는 Object() 클래스를 자동으로 상속받게 되어있다. 따라서 equals(), toString()과 같은 메서드를 바로 사용할 수 있다.
*자식 클래스의 첫 번째 줄에는 항상 부모의 생성자를 호출하는 super() 메서드가 존재한다. 따라서 최상위 클래스의 생성자부터 만들어지게 된다.
상속 문법 및 예제
class 자식 extends 부모 < 형태로 작성한다.
class A{
private String name;
public A() {
System.out.println("수퍼클래스 생성자");
}
public A(String name) {
System.out.println("또 다른수퍼클래스 생성자");
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class B extends A { //모든 클래스는 오브젝트를 상속받고 있다.
int a;
public B(String str, int age) {
super(str); // 부모클래스의 생성자를 호출한다.
a = age;
System.out.println("서브클래스 생성자");
}
public void setA(int a) {this.a = a;}
public int getA() {return a;}
public static void main(String[] args) {
B b = new B("superman",1000);
System.out.println(b.getName()); //상속 받았기 때문에 부모의 메서드를 사용할 수 있다.
System.out.println(b.getA());
}
}
'Java > 자바 이론' 카테고리의 다른 글
[Java] 메서드 오버로딩과 오버라이딩 (1) | 2022.06.30 |
---|---|
[Java] 자바 super 키워드 & super() 메서드 (0) | 2022.06.30 |
[Java] 클래스 관계 HAS-A (포함) / IS-A (상속) 정리 (2) | 2022.06.29 |
[Java] 클래스 내부 구성 요소 3가지 (필드, 생성자, 메서드 + This) (0) | 2022.06.27 |
[Java] String 객체 특징 ( ==와 equals의 차이점 ) (1) | 2022.06.23 |