728x90
클래스간의 관계와 상속
📌 상속의 사전적 정의는 부모가 자식에게 물려주는 행위를 말합니다.
- 객체 지향 프로그램에서도 부모 클래스의 필드와 메서드를 자식 클래스에게 물려줄 수 있습니다.
- 상속을 사용하면 적은 양의 코드로 새로운 클래스를 작성할 수도 있고 공통적인 코드를 관리하여 코드의 추가와 변경이 쉬워질 수도 있습니다.
- 이러한 특성 때문에 상속을 사용하면 코드의 중복이 제거되고 재사용성이 크게 증가하여 생산성과 유지보수성에 매우 유리해 집니다.
📌 클래스간의 상속은 extends 키워드를 사용하여 정의할 수 있습니다.
public class 자식클래스 extends 부모클래스 {
}
- 상속의 키워드는 extends
- 우리는 상속의 개념을 확장의 개념으로 이해해야합니다.
- 부모 클래스에 새로운 필드와 메서드가 추가되면 자식 클래스는 이를 상속받아 사용할 수 있다.
- 자식 클래스에 새로운 필드와 메서드가 추가되어도 부모 클래스는 어떠한 영향도 받지 않는다.
- 따라서 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다.
단일 상속과 다중 상속
📌 Java는 다중상속을 허용하지 않는다.
- 다중상속을 허용하면 복잡한 소프트웨어의 기능을 구현할 때 여러개의 클래스를 상속받아 쉽게 구현할 수 있다는 장점이 있는데.. 왜? 못할까...ㅋ
- 왜냐하면 다중상속을 허용하면 클래스간의 관계가 복잡해지는 문제가 생기기 때문이다.
- 만약 자식 클래스에서 상속받는 서로 다른 부모 클래스들이 같은 이름의 멤버를 가지고 있다면?
- 자식 클래스에서는 이 멤버를 구별할 수 있는 방법이 없다는 문제가 생긴다.
예시
Car: 부모 클래스
public class Car {
String company; // 자동차 회사
private String model; // 자동차 모델
private String color; // 자동차 색상
private double price; // 자동차 가격
double speed; // 자동차 속도 , km/h
char gear = 'P'; // 기어의 상태, P,R,N,D
boolean lights; // 자동차 조명의 상태
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public double gasPedal(double kmh, char type) {
changeGear(type);
speed = kmh;
return speed;
}
public double brakePedal() {
speed = 0;
return speed;
}
public char changeGear(char type) {
gear = type;
return gear;
}
public boolean onOffLights() {
lights = !lights;
return lights;
}
public void horn() {
System.out.println("빵빵");
}
}
SportsCar : 자식 클래스
public class SportsCar extends Car{
String engine;
public void booster() {
System.out.println("엔진 " + engine + " 부앙~\n");
}
}
Main 클래스
public class Main {
public static void main(String[] args) {
// 부모 클래스 객체에서 자식 클래스 멤버 사용
Car car = new Car();
// car.engine = "Orion"; // 오류
// car.booster(); // 오류
// 자식 클래스 객체 생성
SportsCar sportsCar = new SportsCar();
sportsCar.engine = "Orion";
sportsCar.booster();
// 자식 클래스 객체에서 부모 클래스 멤버 사용
sportsCar.company = "GENESIS";
sportsCar.setModel("GV80");
System.out.println("sportsCar.company = " + sportsCar.company);
System.out.println("sportsCar.getModel() = " + sportsCar.getModel());
System.out.println();
sportsCar.horn();
System.out.println(sportsCar.changeGear('D'));
}
}
'JAVA' 카테고리의 다른 글
[JAVA] final 클래스와 final 메서드 (0) | 2023.06.01 |
---|---|
[JAVA] 클래스간의 관계 (0) | 2023.06.01 |
[JAVA] 접근 제어자 (0) | 2023.05.31 |
[JAVA] this 와 this() (0) | 2023.05.31 |
[JAVA] 생성자 (0) | 2023.05.31 |