상속(inheritance)이란?
- 상속(inheritance)이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다.
- 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나.
- 기존에 정의되어 있는 클래스의 모든 필드와 메소드를 물려받아, 새로운 클래스에서 사용 가능.
- 기존에 정의되어 있던 클래스는 부모 클래스(parent class) 또는 상위 클래스(super class), 기초 클래스(base class)라고 부름.
- 상속을 통해 새롭게 작성되는 클래스를 자식 클래스(child class) 또는 하위 클래스(sub class), 파생 클래스(derived class)라고 부름.
// 상속의 예시
class A extends B {
// A는 자식클래스
// B는 부모클래스
}
상속의 장점
- 기존에 작성된 클래스를 재활용.
- 자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스에 작성해 놓으면, 자식 클래스에서는 해당 멤버를 작성하지 않아도 됨.
- 다형성 구현(하나의 객체가 여러 가지 타입을 가질 수 있는 것)
상속의 특징
- 자식 클래스는 부모 클래스의 메소드와 필드를 사용할 수 있다.
- 부모 클래스를 호출하고 싶을때는 super()를 쓴다
- 상속받은 메소드를 오버라이딩(재정의)해서 사용할 수 있다
- final 클래스는 상속 할 수 없다.
오버라이딩
- 오버라이딩이란 상속받은 메소드를 자식 클래스에서 재정의하는 것을 말한다.
- 일반 클래스의 상속 관계보단 추상 클래스나 인터페이스에서 주로 사용되는 개념이다.
- 오버라이딩이란 메소드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 함
하지만 메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있음
- 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없음
- 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없음
인터페이스(interface)란?
- 자식 클래스가 여러 부모 클래스를 상속받을 수 없기에 인터페이스를 통해 다중 상속을 지원함.
- 기본이 되는 틀을 제공, 추상 클래스를 의미
// 인터페이스 예시
class A implements B {
// A는 자식클래스
// B는 인터페이스
}
인터페이스의 장점
- 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능합니다.
- 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있습니다.
- 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능합니다.
출처:
http://www.tcpschool.com/java/java_inheritance_concept
http://www.tcpschool.com/java/java_polymorphism_interface