SEOKIHOUSE 2023. 4. 8. 21:03
package practice0406;

class man1 {
	String name;

	man1(String name) {
		this.name = name;
	}

	public void ride(transport1 trans) {
		trans.ride();
	}
}

class bus extends transport1{
	public void ride() {
		System.out.println("버스탄다");
	}
}

class airplane extends transport1{
	public void ride() {
		System.out.println("뱅기탄다");
	}
}

class transport1 {
	public void ride() {
		System.out.println("암거나 탈란다");
	}
}

public class 다시해보기 {
	public static void main(String[] args) {
		man1 m1 = new man1("짱구");
		bus b1 = new bus();
		airplane a1 = new airplane();
		transport1 t1 = new transport1();
		
		m1.ride(b1);
		m1.ride(t1);
	}

}

package practice0406;

class Man {
	String name;
	transport t;

	Man(String name) {
		this.name = name;
	}

	void rideBus(ExpressBus eb) {
		transport t = new ExpressBus();
		eb = (ExpressBus) t;
		eb.goToSeoul();
	}

	void rideKtx(Ktx kt) {
		transport t = new Ktx();
		kt = (Ktx) t;
		kt.goToSeoul();
	}

	// 1.위에 두개를 요고 하나로 압축
	void rideVehicle(transport trans) {
		trans.goToSeoul();
	}
	//2.getclass써서 비교하는거 혹은 위에꺼 쓰면된다

	//3.instanceof -> but같은내용출력가능성있음
//	void rideVehicle(transport trans) {
//		if (trans instanceof transport) {
//			System.out.println("뭐든타고간다"); // if 조건문에서 trans instanceof transport 라는 조건이 항상 참이 되기
//			trans.goToSeoul(); 				// 때문에 System.out.println("뭐든타고간다"); 가 무조건 출력되게 됩니다.
//		} else if (trans instanceof Ktx) { // 그리고 transport 클래스를 상속받은 ExpressBus와 Ktx 클래스의 인스턴스를 처리할 때도
//			System.out.println("ktx"); 		// trans instanceof Ktx 와 trans instanceof ExpressBus 라는 조건이 참이 되기 때문에,
//			trans.goToSeoul(); 				// 각각의 if 블록에서도 System.out.println("뭐든타고간다"); 가 출력되게 됩니다.
//		} else if (trans instanceof ExpressBus) {
//			System.out.println("bus");
//			trans.goToSeoul();
//		} else {
//			System.out.println("???");
//		}
//	}
}

class ExpressBus extends transport {
	void goToSeoul() {
		System.out.println("버스타고 서울감");
	}
}

class Ktx extends transport {

	void goToSeoul() {
		System.out.println("ktx타고 서울감");
	}
}

class transport {
	void goToSeoul() {
		System.out.println("뭐든타고간다");
	}
}

public class TransportationTest {

	public static void main(String[] args) {
		// 사람이 버스를 타면 버스를타고 서울가요가 출력
		Man m = new Man("짱구");
		ExpressBus eb = new ExpressBus();
		Ktx kt = new Ktx();
		transport tr = new transport();

		m.rideBus(eb);
		m.rideKtx(kt);
		System.out.println("-------------------");
		// 하나로 압축
		m.rideVehicle(tr);
		m.rideVehicle(eb);
		m.rideVehicle(kt);
	}

}