상속_java

2022. 2. 25. 14:56ksmart_Java/Java

728x90

 상속 

- 클래스 확장
- 확장한 클래스는 확장 할 대상을 상속 받아야 한다.
- 확장 된 대상은 확장 할 대상의 멤버를 가지고(포함) 있다.
- 확장 할 대상 -> 슈퍼 클래스
- 확장 된 대상 -> 서브 클래스 

- extends 키워드로 상속이 가능하다.

package kr.or.ksmart;

class Car { // 추상적인 클래스 (슈퍼클래스)
	// 슈퍼클래스, 서브클래스 각자 캡슐화

	// 접근지정자-서브클래스 접근 불가능
	private double gas;

	public Car() {
		System.out.println("슈퍼클래스 Car");
	}

	public double getGas() {
		return gas;
	}

	public void setGas(double gas) {
		this.gas = gas;
	}
}

// extends 키워드로 추상적인 클래스를 상속받는다.
class RacingCar extends Car { // 확장시킬 클래스 (서브클래스)
	public RacingCar() {
		System.out.println("서브클래스 RacingCar");
	}

	public void move() {
		System.out.println("RacingCar - go");
	}
}

class Bus extends Car {
	private int num;

	public Bus() {
		System.out.println("서브클래스 Bus");
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}
}

public class JavaBasic04 {
	public static void main(String[] args) {
		/**
		 * 상속 - 클래스 확장 - 확장한 클래스는 확장 할 대상을 상속 받아야 한다. - 확장 된 대상은 확장 할 대상의 멤버를 가지고(포함)
		 * 있다. - 확장 할 대상 -> 슈퍼 클래스 - 확장 된 대상 -> 서브 클래스
		 */
		RacingCar rc = new RacingCar();
		rc.setGas(0.1);
		System.out.println(rc.getGas());
		rc.move();

		Bus bus = new Bus();
		bus.setGas(1.1);
		System.out.println(bus.getGas());
		bus.setNum(25);
		System.out.println(bus.getNum());
		/**
		 * Bus bus = new Bus(); 객체화시 Car, Bus 객체를 둘 다 가지고 있습니다. 서브클래스 객체화 시 슈퍼 클래스도 객체화가
		 * 되었음으로 참조타입을 슈퍼클래스로 쓰일 수 있다.
		 */
		/* 서브클래스는 슈퍼클래스로 대처 될 수 있다. */

		System.out.println("*******************");
		/********************************
		 * 참조타입에 의한 멤버만 접근(호출) 가능하다.
		*****************************/
		Car rc2 = new RacingCar(); // Car, RacingCar
		rc2.setGas(1.1);

		/**
		 * 다운캐스팅, 업캐스팅 - 상속관계 - 객체화 된 대상에 슈퍼 클래스와 서브 클래스 모두 객체화가 이루어져 있을 경우
		 */

		// 다운케스팅 - 큰 객체에서 작은 객체로 변환
		RacingCar rc3 = (RacingCar) rc2;
		rc3.move();
		
		// 업케스팅 - 작은 객체에서 큰 객체로 변환
		// 서브 클래스에서 슈퍼 클래스 타입으로 변환
		Car rc4 = rc3;
		System.out.println(rc4.getGas() + "<-rc4.getGas()");
		
		/**슈퍼클래스가 객체화 될 경우
		추상클래스, 인터페이스로 만든다.(뉴 연산자 못쓰게 하려고!)
		Car c1 = new Car(); //객체화 시 car만 되어있고 RacingCar 없음 캐스팅 불가
		RacingCar c2=(RacingCar) c1;
		*/
		
		Car bus2 = new Bus();

	}
}

 

728x90

'ksmart_Java > Java' 카테고리의 다른 글

로또번호만들기_java  (0) 2022.04.30
객체지향 4대원칙_java  (0) 2022.02.25
객체지향 설계 5대 원칙 - SOLID  (0) 2022.02.25
클래스 선언, 접근지정자, 객체 생성_java  (0) 2022.02.17
주석처리_java  (0) 2022.02.17