정의
객체지향언어의 특징 중 하나이며, 기존의 클래스에 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다.
부모의 것을 자식에게 물려주는 것처럼 Java에는 부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)가 있다.
자식 클래스는 부모 클래스를 선택해 멤버를 상속받아 그대로 쓸 수 있게 된다.
Java에서 상속은 단일상속만을 허용한다.
상위 클래스는 하위 클래스를 여러 개 가질 수 있지만, 그 반대는 불가능하다는 것이다.
주의할 점
Java에서 제어자(Modifier) 가 있다.
하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있지만, 접근제어자는 단 하나만 사용할 수 있다.
그리고 접근제어자를 이용해 캡슐화를 할 수 있다.
접근제어자를 활용하여 패키지나 클래스별로 접근할 수 있는 범위를 지정해 줄 수 있는데 그로 인해 상속에 대해 알아야 할 부분이 있다.
이 외의 경우는 모두 상속의 대상이 된다.
그리고 접근제어자를 사용함으로 인해 캡슐화 의 이점을 가질 수 있게 된다.
캡슐화
가장 핵심이자 장점은 외부에서 쉽게 접근하지 못하도록 은닉하는 것이다.
직접적인 접근을 막고 외부에서 내부의 정보에 직접 접근하거나 변경할 수 없고, 객체가 제공하는 필드와 메서드를 통해서만 접근이 가능하다.
상속을 쓰는 이유가 여기에서 나온다.
즉, 유지보수가 쉬워지고 확장성이 용이해지며 재사용이 가능해지고 코드가 간결해지기 때문에 시간을 단축할 수 있다.
클래스 상속
예제
[부모 클래스]
public class Animal {
String name; // 이름
int age; // 나이
public void information() {
System.out.println(name + " 은(는) " + age + "살 입니다.");
}
}
[자식 클래스]
public class Cat extends Animal {
// Cat 클래스가 Animal을 상속받아 사용
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
}
[Main]
public class Main {
public static void main(String[] args) {
Cat cat = new Cat("김애옹", 2);
cat.information();
}
}
[출력결과]
김애옹 은(는) 2살 입니다.
종료 코드 0(으)로 완료된 프로세스
인터페이스 상속
예제
[인터페이스 1]
public interface Employee {
public void printEmp();
}
[인터페이스 2]
public interface Information {
public void printInformation();
}
[인터페이스를 상속받은 클래스]
public class Company implements Employee, Information {
String emp;
int empAge;
String rank;
String team;
public Company(String emp, int empAge, String rank, String team){
this.emp = emp;
this.empAge = empAge;
this.rank = rank;
this.team = team;
}
@Override
public void printEmp() {
System.out.println(emp + "사원은 " + empAge + " 세 입니다.");
}
@Override
public void printInformation() {
System.out.println(emp + " 사원은 " + team + rank + " 입니다.");
}
}
[Main]
public class Main {
public static void main(String[] args) {
Company emp1 = new Company("홍길동", 37, "부장", "개발팀");
Company emp2 = new Company("김유신", 25, "사원", "개발팀");
emp1.printEmp();
emp1.printInformation();
System.out.println("---------------------");
emp2.printEmp();
emp2.printInformation();
}
}
[출력결과]
홍길동사원은 37 세 입니다.
홍길동 사원은 개발팀부장 입니다.
---------------------
김유신사원은 25 세 입니다.
김유신 사원은 개발팀사원 입니다.
종료 코드 0(으)로 완료된 프로세스
그리고 상속에서 클래스 상속과 인터페이스 상속이 있다.
클래스 상속은 클래스를 확장하는 것이고 인터페이스 상속은 인터페이스를 구현하는 것이다.
참고 : https://jaynamm.tistory.com/entry/JAVA-상속Inheritance-기본-개념-정리 [제이로그:티스토리]