07-37.1 상속이란?
Def) 상속
public class 클래스명 extends 부모클래스명
Ex) Bus라는 클래스와 Car라는 클래스가 있을 때 "bus는 car입니다"라고 말할 수 있다면?
-> Bus: 자식 클래스 , Car: 부모 클래스
07-37.2 상속 예제
(1) 이클립스 JavaStudy 패키지 선택, 마우스 오른쪽 New > Class
(2) Name: Bus 입력
(3) Superclass의 Browsw 클릭
(4) Superclass selection 창에서 Choose a type 칸에 Car 입력 후, OK 클릭
(5) New Jaca Class 창의 Finish를 눌러 클래스를 생성한다.
<hide/>
package javaStudy;
public class Bus extends Car {
}
(6) 그러면 위와 같은 코드가 만들어진다.
(7) "extends"라는 키워드와 클래스명을 사용하면 부모 클래스가 가진 걸 상속 받을 수 있다.
07-37.3 Car 클래스에 메서드 추가하자
<hide/>
package javaStudy;
public class Car{
public void run() {
System.out.println("달리다.");
}
}
(1) Car클래스에 run이라는 메서드를 추가한다.
<hide/>
package javaStudy;
public class BusExam {
public static void main(String[] args) {
Bus bus = new Bus();
bus.run();
}
}
(2) Bus클래스를 테스트할 수 있는 클래스 BusExam를 만든다.
(3) Bus 클래스를 이용해 인스턴스를 하나 생성하고 run메서드를 실행한다.
Note) 출력 결과 : 달리다
- Bus클래스에는 아무런 메서드도 정의하지 않았지만 Car클래스를 상속받음으로써
- 부모 클래스 Car가 가지는 run메서드를 사용할 수 있다.
07-37.4 확장 예제
<hide/>
package javaStudy;
public class Bus extends Car {
public void ppangppang(){
System.out.println("빵빵");
}
}
(1) Bus클래스에 다른 메서드 ppangppang를 추가한다.
(2) 그러면 Bus클래스는 Car클래스에게 물려받은 run 메서드와 ppangppang메서드를 사용 가능.
<hide/>
package javaStudy;
public class BusExam {
public static void main(String[] args) {
Bus bus = new Bus();
bus.run();
bus.ppangppang();
}
}
(3) BusExam에서 실행을 하면 "달리다 빵빵"이 출력 된다.
- 이렇게 부모가 가진 메서드 외에 추가로 메서드를 선언하는 것을 "확장"이라고 한다.
- 이 때 확장한 메서드를 부모 클래스인 Car가 쓸 수 있을까?
<hide/>
package javaStudy;
public class BusExam {
public static void main(String[] args) {
Bus bus = new Bus();
bus.run();
bus.ppangppang();
Car car = new Car();
car.run();
car.ppangppang();
}
}
(4) 출력 결과: The method ppangppang() is undefined for the type Car
- Car 객체를 생성하고 run메서드를 실행하면 수행된다
- 하지만 ppangppang 메서드는 에러가 난다.
- run 메서드는 Car클래스가 가진 메서드이므로 당연히 수행되지만 ppangppang은 에러가 난다.
- 즉, 부모 클래스가 자식 클래스의 메서드를 사용할 수는 없다.
07-37.5 상속 실습 ) Machine 클래스는 turnOn메서드와 turnOff 메서드가 있다.
Car클래스가 Machine클래스를 상속 받도록 하시오.
<hide/>
package javaStudy;
public class Machine {
public void turnOn() {
System.out.println("켰습니다.");
}
public void turnOff() {
System.out.println("껐습니다.");
}
}
<hide/>
package javaStudy;
public class CarExam {
public static void main(String[] args) {
Car car1 = new Car();
car1.turnOn();
car1.turnOff();
}
}
- machine 클래스의 하단에 다음과 같이 코드를 추가하면 Car클래스가 상속 받도록 만들 수 있다.
<hide/>
package javaStudy;
public class Machine {
public void turnOn() {
System.out.println("켰습니다.");
}
public void turnOff() {
System.out.println("껐습니다.");
}
}
class Car extends Machine {
}
- 정의하는 클래스명 뒤에 "extends 상속할 클래스명"을 써주면 상속된다.
- 이로써 Car 클래스에 아무것도 정의하지 않았으나 machine 클래스의 모든 구성 요소를 사용 가능하다.
'Java > 모두의 자바' 카테고리의 다른 글
Chapter 07-39 추상 클래스 (0) | 2022.02.08 |
---|---|
Chapter 07-38 접근 제한자 (0) | 2022.02.08 |
Chapter 06-36 패키지 (0) | 2022.02.07 |
Chapter 06-35 생성자 오버로딩과 this (0) | 2022.02.07 |
Chapter 06-34 메서드 오버로딩 (0) | 2022.02.07 |