Java/모두의 자바

Chapter 07-37 상속이란?

계란💕 2022. 2. 8. 15:01

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