728x90
목차
1. 상속
■ 상속이란?
- 자식 클래스가 부모 클래스의 멤버를 물려받는 것
- 부모 클래스를 재사용해 자식 클래스를 빠르게 개발 가능
- extends는 자식 클래스가 상속할 부모 클래스를 지정하는 키워드
- 자바는 단일 상속으로 하나의 부모 클래스를 상속받음
■ 장점
- 반복된 코드 중복을 줄임
- 유지 보수가 편리함
- 객체 다형성 구현 가능
2. 오버라이드(Override)
■ 오버라이드란?
- 오버라이드는 재정의를 뜻하며 부모 클래스의 메소드를 자식 클래스에서 새롭게 정의하는 것을 뜻함
- 재정의 시 부모 클래스의 주소를 끊고 새로운 주소로 정의함
- 재정의 시 메소드의 선언부는 기존 메소드와 같아야 함
- 재정의를 하지 않을 경우에는 부모 클래스를 참조함
3. 예시
■ Car
package j13_상속;
public class Car {
private String company;
private String model;
private int price;
public Car() {
System.out.println("부모");
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int discountPrice(int percentage) {
return price - (price * percentage / 100);
}
}
■ HyundaiCar
package j13_상속;
public class HyundaiCar extends Car {
private boolean premium;
}
■ KiaCar
package j13_상속;
public class KiaCar extends Car {
public KiaCar() {
// super는 상위 객체를 의미함
// 부모 클래스의 생성자를 출력함
// 부모 클래스가 먼저 생성되어야 함
super();
System.out.println("자식");
}
// 정의하지 않으면 부모 클래스에 있는 걸 직접적으로 가져옴
@Override
public int discountPrice(int percentage) {
return super.discountPrice(percentage);
}
}
■ ExtendsMain
package j13_상속;
public class ExtendsMain {
public static void main(String[] args) {
KiaCar kiaCar = new KiaCar();
kiaCar.setPrice(30000000);
System.out.println(kiaCar);
System.out.println(kiaCar.getPrice());
System.out.println(kiaCar.discountPrice(20));
}
}
■ View
package j13_상속.casting;
public class View {
public void show() {
}
public boolean menu(String select) {
return false;
}
}
■ MainView
package j13_상속.casting;
public class MainView extends View {
@Override
public void show() {
System.out.println("[메인메뉴]");
System.out.println("1. [메인] 메뉴 1번");
System.out.println("2. [메인] 메뉴 2번");
System.out.println("3. 수정 메뉴 이동");
System.out.println("exit. 영역 종료");
System.out.println("======================");
}
@Override
public boolean menu(String select) {
if (select.equals("exit")) {
System.out.println("해당 영역 종료");
return false;
}
if (select.equals("1")) {
System.out.println("[메인] 메뉴에서 1번 선택");
} else if (select.equals("2")) {
System.out.println("[메인] 메뉴에서 2번 선택");
} else if (select.equals("3")) {
Controller updateController = new Controller(new UpdateView());
updateController.run();
} else {
System.out.println("다시 입력하세요.");
}
return true;
}
}
■ UpdateView
package j13_상속.casting;
public class UpdateView extends View {
@Override
public void show() {
System.out.println("[수정메뉴]");
System.out.println("1. [수정] 메뉴 1번");
System.out.println("2. [수정] 메뉴 2번");
System.out.println("exit. 영역 종료");
System.out.println("======================");
}
@Override
public boolean menu(String select) {
if (select.equals("exit")) {
System.out.println("해당 영역 종료");
return false;
}
if (select.equals("1")) {
System.out.println("[수정] 메뉴에서 1번 선택");
} else if (select.equals("2")) {
System.out.println("[수정] 메뉴에서 2번 선택");
} else {
System.out.println("다시 입력하세요.");
}
return true;
}
}
■ Controller
package j13_상속.casting;
import java.util.Scanner;
public class Controller {
private View view;
private Scanner scanner;
public Controller(View view) {
this.view = view;
scanner = new Scanner(System.in);
}
public void run() {
boolean flag = true;
String select = null;
while (flag) {
view.show();
System.out.print("명령 입력 : ");
select = scanner.nextLine();
flag = view.menu(select);
System.out.println();
}
}
}
■ Main
package j13_상속.casting;
public class Main {
public static void main(String[] args) {
Controller controller = new Controller(new MainView());
controller.run();
System.out.println("프로그램 종료");
}
}