객체 지향의 꽃

다형성이란 상속을 전제로 하여 하나의 클래스(메소드)가 다양한 방식으로 동작하는 것을 말한다. 상위클래스가 하위클래스에게 동일한 메세지로 서로 다르게 동작시키는 것이다.

하나의 메소드로 자식클래스에서 다양한 메소드로 오버라이딩 하여 쓸수 있어 재사용성이 높아진다.

업캐스팅, 다운캐스팅, 오버라이드가 쉽게 생각할 수 있는 다형성의 한 모습이다.

다형성 사용 방법

다형성 인수

poly.jpg

다형성 배열

private static void display(Object o) { // 1)Car c =s , 2) t
		// sedan,truck의 모든 메서드에 접근하여 출력하시오.
		// instanceof연산자를 사용하시오
		//instanceof : 이 객체가 이 클래스로 만들어진게 맞냐 ?

		if (o instanceof Sedan) {
			// 묵시적 형벼환
			//Sedan s =(Sedan)o;
			((Sedan)o).drive();
			((Sedan) o).manOfCar();
			// 명시적 형변환
	    	((Sedan) o).openWindows();
			 
		}

		System.out.println("--------------");

		if (o instanceof Truck) {
			((Truck) o).drive();
			((Truck) o).manOfCar();
			((Truck) o).displayCarInfo();
		}

	}
private static void display(Object[] o) { // Car[] c=c;
		// 배열의 값에 접근 할때 쓰는 방법
		for (int i = 0; i < o.length; i++) { // 0 ,1
			if (o[i] instanceof Sedan) {
				// 묵시적 형벼환
				((Sedan) o[i]).drive();
				((Sedan) o[i]).manOfCar();
				// 명시적 형변환
				((Sedan) o[i]).openWindows();
			}

			System.out.println("--------------");

			if (o[i] instanceof Truck) {
				((Truck) o[i]).drive();
				((Truck) o[i]).manOfCar();
				((Truck) o[i]).displayCarInfo();
			}
		}