728x90
1. 상속?
카메라 패키지 안에 클래스를 세개 만들었다.
Camera camera = new Camera();
FactoryCam factoryCam = new FactoryCam();
SpeedCam speedCam = new SpeedCam();
1-1. 왜 상속이 중요한가.
귀찮음을 사라지게 해주는게 가장 크다. 예를들어 위의 세개 클래스에 각각 메소드를 넣어보자
// Camera
public Camera() {
this("카메라");
}
protected Camera(String name) {
this.name = name;
}
public void takePicture() {
// 사진 촬영
System.out.println(this.name + " : 사진을 촬영합니다.");
}
public void recordVideo() {
// 동영상 녹화
System.out.println(this.name + " : 동영상을 녹화합니다");
}
모든 카메라에는 사진촬영 기능과 동영상 녹화 기능이 같이 들어있어야 한다. 하지만 클래스가 1억개라면 이걸 하나하나 적고 있는건 시간낭비 일듯.
그래서 상속이라는 것을 사용한다.
1-2. 상속의 이점
- 공통 클래스가 있고 다른 클래스를 추가해야할때
- 코드가 짧아짐
1-3. 사용법
자식에게 extends 부모 클래스이름 을 붙여주면 끝이다.
1-4. 코드 관찰
// Camera
public String name;
// 생성자 만들기
public Camera() {
this("카메라");
}
protected Camera(String name) {
this.name = name;
}
public void takePicture() {
// 사진 촬영
System.out.println(this.name + " : 사진을 촬영합니다.");
}
public FactoryCam() {
super("공장 카메라");
}
public void recordVideo(){
// 동영상 녹화
super.recordVideo();
detectFire();
}
public void detectFire(){
// 화재 감지
System.out.println("화재를 감지합니다.");
}
public SpeedCam() {
super("과속단속 카메라");
}
public void takePicture(){
// 사진 촬영
super.takePicture();
checkSpeed();
recognizeLicensePlate();
}
여기서 super은 아직 안배웠기 때문에 신경쓰지말자. 중요한건 사진 촬영과 동영상 녹화를 각각 따로 적어주지 않아도 자동으로 된다는 것이다.
추가적인 기능을 쓰고 싶다면 원하는 기능을 호출하면 된다,.
factoryCam.detectFire();
speedCam.checkSpeed();
speedCam.recognizeLicensePlate();
2. 메소드 오버라이딩
오버라이딩 이라는 것은 엎어쓰기를 의미한다.
2-1. 사용법
원하는 메소드를 자식 메소드에 붙여넣기 하고 내용을 알맞게 변환 하면된다.
2-2. 활용
만약 각각 다른 캠의 기능을 따로 출력하고 싶다면?
// 클래스 호출하기
Camera camera = new Camera();
FactoryCam factoryCam = new FactoryCam();
SpeedCam speedCam = new SpeedCam();
// Camera
public void showMainFeature() {
System.out.println(this.name + "의 주요 기능 : 사진촬영, 동영상 녹화");
}
// FactoryCam
public void showMainFeature(){
System.out.println(this.name + "의 주요 기능 : 화재감지");
}
// SpeedCam
public void showMainFeature() {
System.out.println(this.name + "의 주요 기능 : 속도 측정, 번호 인식");
}
이렇게 붙여넣기를 통해서 내용만 알맞게 수정하면 된다.
반응형
'Java 개념' 카테고리의 다른 글
참조 (0) | 2023.07.03 |
---|---|
다형성과 super (0) | 2023.07.02 |
패키지 (0) | 2023.07.02 |
접근제어자 (0) | 2023.07.02 |
getter, setter2 (0) | 2023.07.02 |