상속
부모 클래스의 필드와 메서드를 자식 클래스에게 물려주는 행위 이다.
상속을 사용하면 새로운 클래스를 적은양의 코드로 작성할 수 있고 공통된 코드들을 관리하여 추가,변경이 쉬워진다.
이러한 특징으로 상속을 사용하면 코드의 중복이 제거되고 재사용성이 크게 증가하여 유지보수성에 유리하다.
public class 자식클래스 extends 부모클래스 {
}
java 에서는 다중상속은 불가하다.
다중상속을 허용하면 클래스간의 관계가 복잡해지는 문제가 생기기 때문이다.
오버라이딩
부모클래스를 상속받아 그대로 사용가능하지만 자식클래스의 상황에 맞게 변경해서 사용하는 경우 이것을 오버라이딩이라한다.
오버라이딩 조건
1.선언부가 부모 클래스의 메서드 보다 좁은 범위로 변경할 수 없다.
2.접근 제어자를 부모 클래스의 메서드 보다 좁은 범위로 변경할 수 없다.
3.예외는 부모 클래스의 메서드 보다 많이 선언 할 수 없다.
public abstract class Burger {
int patty;
List<String> vegetables; //문자열 리스트 생성할때 List<>
List<String> extras;
public abstract Burger recipe(); //방법을 구체화 하지않고 다른 클래스에서 가져가서 알아서 조합하는 것 abstract
}
public class Whopper extends Burger {
String bunOption;
public Whopper() {
super();
this.bunOption = "GLAZED";
}
@Override //없어도 오류가 안나지만 출처를 밝히기 위해 남이봐도 이해가는 코드를 위해
public Burger recipe() {
grillPatty();
super.vegetables.addAll(List.of("Tomato","Onion")); //this 라고 써도되지만 super라고 쓴이유는 확실히하기위해
return this;
}
public void grillPatty() {
super.patty = 110;
}
}
위 예제는 Burger라는 부모클래스를 Whopper라는 자식클래스가 상속받아 필드를 사용하는 모습이다.
Burger의 recipe 경우 버거 종류마다 다르기때문에 Burger 클래스에서 정의하지않고 만들기만 한 후 자식클래스에서 가져와 상황에 맞게 갖다쓴다. 그리고 @Override를 붙여준다.
Whopper 클래스에서 this가 자주 등장하는데, 이는 Whopper 클래스에 있는 이것(생성되어진것들) 이라고 지칭해주는 것이다.
실제로 없어도 작동은 되지만 붙여 줌으로써 다른사람이 코드를 볼때도 한눈에 알아보기 쉽다.
부모클래스에서 가져온 것에는 super라는것을 붙여줌으로써 부모에 있는것을 가져와썼다는것을 알려준다.
Burgur를 예로 클래스간 상속에 대해 알아봤다.
'java 배우기 > TIL' 카테고리의 다른 글
| HTTP Method (0) | 2024.08.16 |
|---|---|
| 상태 코드 status code (0) | 2024.08.13 |
| MVC 디자인 패턴 (0) | 2024.08.10 |
| 래퍼(wrapper)클래스 이해하기 (0) | 2024.08.09 |
| 팀 프로젝트(학생정보 등록,수정, 조회)를 완성하며 KPT 회고 (0) | 2024.08.08 |