티스토리 뷰
다형성은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 코드 측면에서 보면 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다. 자바에서는 부모 타입에 모든 자식객체가 대입될 수 있다.
Parent라는 클래스를 상속받은 Boy와 Girl라는 클래스가 있다고하면 다음과같이 부모클래스타입에 자식객체를 대입할 수있다.
Parent parant1 = new Boy(); //자식타입은 부모타입으로 자동 타입 변환이 가능하다.
Parent parent2 = new Girl();
이런 방식을 왜 사용할까?
다형성을 구현 하는 방법이기 때문이다. 다형성은 위에 설명한것과 같이 동일한 타입을 사용하지만 다양한 결과가 나오는 성질을 말한다.
(하나의 Parent타입으로 상속받은 여러 클래스들을 사용하여 다양한 기능과 결과를 얻을 수 있기때문이다.)
자식클래스가 자신의 타입으로 객체를 생성하지 않고 부모의 타입으로 객체를 생성한다면 다형성으로인한 효과를 볼 수 있지만 부모클래스에 선언된 필드와 메소드만 접근이 가능하다. 하지만 메소드가 자식클래스에서 오버라이딩 되었다면 자식 클래스의 메소드가 대신 호출이 된다.
class Parent { //부모클래스
void method1() { System.out.println("부모의 method1"); }
void method2() { System.out.println("부모의 method2"); }
}
class Child extends Parent{ //부모클래스를 상속받은 자식클래스
void method2() { System.out.println("자식의 method2"); } //Overriding
void method3() { System.out.println("자식의 method3"); }
}
class childExample{
public static void main(String[] args){
Child child= new Child();
Parent parent = child // == Parent parent = new Child();
parent.method1(); // 부모의 method1
parent.method2(); // 자식의 method2
parent.method3(); // (errer:호출불가능)
}
강제 타입 변환 (Casting)
만약 자식타입에 선언된 필드와 메소드를 꼭 사용해야 한다면 강제 타입 변환을 해서 다시 자식 타입으로 변환한 다음 자식 타입의 필드와 메소드를 사요하면 된다.
class Parent { //부모클래스
String fhild1;
void method1() { }
void method2() { }
}
class Child extends Parent{ //부모클래스를 상속받은 자식클래스
String fhild2;
void method3() { }
}
class childExample{
public static void main(String[] args){
Parent parent = new Child();
parent .field1 = "xxx";
parent .method1();
parent .method2();
parent .field2 = "xxx"; // (불가능)
parent .method3(); // (불가능)
Child child = (Child) parent;
parent .field2 = "xxx"; // (가능)
parent .method3(); // (가능)
}
단. 자식타입이 무모타입으로 변환된 상태에서만 사용이 가능하다. 이경우 instanceof 연산자를 사용하여 확인후 사용하면된다.
'Study ! > JAVA' 카테고리의 다른 글
JAVA 정리 5. 인터페이스 (0) | 2018.09.14 |
---|---|
JAVA 정리 4-3. 추상클래스 (0) | 2018.09.13 |
JAVA 정리 4-1. 상속과 Override (0) | 2018.09.13 |
JAVA 정리 3. 접근 제한자 (public, protected, private) (0) | 2018.09.09 |
JAVA 정리 2. 클래스 (0) | 2018.09.09 |
댓글