[Java] polymorphism
컴퓨터/Javapackage _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 |