개발새발 블로그

[Java] polymorphism

컴퓨터/Java
package _05_polymorphism;
class A {int a=1;}
class B extends A {int b=2;}
class C extends A {int c=3;}
class D extends B {int d=4;}
class E extends C {int e=5;}

public class T01_polyRun {
	public static void main(String[] args) {
		// 자동 형변환 : 자식을 부모 타입으로 형변환
		B b = new B();
		C c = new C();
		D d = new D();
		E e = new E();
		
		A a1 = b;
		A a2 = c;
		A a3 = d;
		A a4 = e;
		
		System.out.println(b.a);
		System.out.println(b.b);
		
		System.out.println(a1.a);
		// System.out.println(a1.b); // A클래스 타입을 형변환했기 때문에 A클래스만 사용할 수 있다
		System.out.println(a2.a);  // c변수 사용불가
		System.out.println(a3.a);  // d변수 사용불가
		System.out.println(a4.a);  // e변수 사용불가
	}
}

 

 

package _05_polymorphism;
class Parent {
	void method1() {
		System.out.println("parent method1()");
	}
	void method2() {
		System.out.println("parent method2()");
	}
}

class Child extends Parent {
	@Override
	void method2() {
		System.out.println("child method2()");
	}
	void method3() {
		System.out.println("child method3()");
	}
}
public class T02_polyRun {

	public static void main(String[] args) {
		
		Child child = new Child();
		Parent parent = child;
	
		Parent parent2 = new Child();
		parent2.method1();
		
		// 오버라이딩한 메소드는 형변환과 상관없이 무조건 오버라이딩한 메소드 호출
		parent2.method2();
	}
}

 

 

package _05_polymorphism;
class Car {
	String color;
	int speed;
	void dirve() {
		System.out.println("운전중 빵빵!!!!");
	}
	void stop() {
		System.out.println("stop!!!");
	}
}
class FireCar extends Car {
	void water() {
		System.out.println("물을 뿌립니다!~~~");
	}
}
public class T03_polyRun {
	public static void main(String[] args) {
		FireCar fCar = new FireCar();
		fCar.dirve();
		fCar.water();
		fCar.stop();
		
		Car car = fCar;
		car.dirve();
		car.stop();
		// car.water(); 사용불가
		
		FireCar fCar2 = (FireCar)car;  // 부모타입 => 자식타입으로 강제형변환
		/*
		 * 주의
		    반드시 부모는 최초객체생성시 자식의 타입으로 객체 생성 되어 있어야 됨
		 */
		
		Car car2 = new Car();
		
		// 컴파일 오류(실행시 오류가 발생)
		// FireCar fCar3 = (FireCar)car2;
		
		// instanceof : 좌측의 객체가 우측의 타입으로 만들어졌느냐 검사(true)
		FireCar fCar3 = null;
		if(fCar3 instanceof FireCar) {
			fCar3 = (FireCar)car2;
		} else {
			System.out.println("변환할 수 없음");
		}
	}
}

'컴퓨터 > Java' 카테고리의 다른 글

[Java] super  (0) 2024.08.02
[Java] overriding  (0) 2024.08.02
[Java] 상속  (0) 2024.07.25
[Java] static  (0) 2024.07.25
[Java] 오버로딩  (0) 2024.07.25