상속
Jul 29, 2024
상속
상속은 객체 지향 프로그래밍의 중요한 개념 중 하나로, 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아 재사용하고 확장할 수 있게 해주는 기능. 자바에서 상속을 사용하면, 코드의 재사용성을 높이고, 유지보수를 용이하게 하며, 객체 간의 계층 구조를 설계 할 수 있습니다.
상속의 기본개념
- 부모 클래스: 상속을 제공하는 클래스, 상위 클래스라고 하며, 또는 기본 클래스라고 함.
- 자식 클래스: 상속을 받는 클래스, 하위 클래스라고 하며, 파생 클래스라고 함
상속의 장점
- 코드 재사용성: 부모 클래스의 코드를 자식 클래스에서도 재사용 가능.
- 유지보수 용이성: 코드를 한 곳에 수정하면, 상속받은 모든 클래스에 적용됨.
- 계층 구조 설계: 클래스 간의 관계를 계층적으로 설계하고, 시스템을 더 구조적으로 만든다.
상속의 단점
- 높은 결합도: 상속은 부모 클래스와 자식 클래스 간의 강한 결합을 초래할 수 있음.
- 유연성 부족: 상속은 클래스 간의 관계를 컴파일 타임에 결정하므로 런타임에 변경하기 어렵다.
- 다중 상속 불가: 자바는 단일 상속만을 지원하기 때문에, 한 클래스가 여러 부모 클래스를 상속 받을 수는 없다.
ex) 예시문제
package ex06.example; class Animal { void speak() { System.out.println("멍멍멍멍멍"); } void run() { System.out.println("달린다"); } } class Cat extends Animal { void speak() { //재정의(오버라이딩) : 맘에 안드는 메서드를 덮어씌우는 기능 System.out.println("야옹"); } } public class AnimalEx01 { public static void main(String[] args) { Cat c1 = new Cat(); c1.speak(); c1.run(); } }
D:\tools\jdk-21.0.1\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3\lib\idea_rt.jar=54394:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\workspace\java_lec\study\out\production\study ex06.example.AnimalEx01 야옹 달린다 Process finished with exit code 0
→ 부모의 class에 짖는 메서드와 달린다는 메서드를 함께 입력되었지만 자식 class의 메서드에 다르게 짖는 메서드를 입력하면 부모 class에서 짖는 메서드는 무효화 되고 자식의 class에서 재정의(오버라이딩)가 되게 된다.
상속을 할 경우에는 extend (부모의 class)를 입력해 주면서 부모의 class를 상속 받는다
- 생성자의 호출 순서
생성자의 호출 순서
부모의 생성자 -> 자식의 생성자
부모의 생성자가 없다면 디폴트 생성자를 자동으로 생성하지 않는다.
메서드 오버라이딩
1. 오버라이딩이란 상속받은 메서드를 자식 클래스에서 재정의하여 사용하는 것
이다.
2. 자식 클래스에서 부모의 메서드를 수정해야 할 때
사용된다. 일반 클래스의 상속 관계에서는 많이 사용되지는 않고
추상 클래스나 인터페이스에서 필수적으로 사용되는 개념이다.
3. 자식 클래스에서 부모 클래스의 메서드와 동일한 시그니쳐 (메서드 이름, 리턴 타입, 매개변수의 개수/ 자료형/순서)를 적용하여야 한다.
4. 오버라이딩 결과 부모 메서드는 은닉되고,
자식 클래스에서 재정의된 메서드만 기본적으로 호출
된다. 필요시 super. 으로 부모 메서드를 호출 할 수 있다.
Share article