본문 바로가기
Java

Java 다형성 ( Polymorphism )

by 신입같은 3년차 2017. 7. 12.
728x90

 

다형성에 대한 설명은 코드안에 주석으로 설명달아놨습니다.

 


/**
 * 다형성 ( polymorphism ) : 여러가지 형태로 저장할 수 있는 성질. 부모의 참조변수의 자식의 객체를 저장할 수 있다.
 * 
 * 여러가지 형태를 가질 수 있는 능력
 * 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는것.
 */
public class Polymorphism {
	private void main() {
		// TODO Auto-generated method stub
		Tv t1 = new Tv();
		
		CaptionTv c1 = new CaptionTv();
		CaptionTv c2 = new CaptionTv();
		
		Tv t = c1; // 부모의 참조변수에 자식의 객체를 저장할 수 잇는 성질.
		
		System.out.println(c1.name + " , " + c1.caption);
		System.out.println(t.name); // t.caption 불가
		
		// 참조변수의 멤버까지 접근가능하다.
		// 원래 객체의 멤버를 모두 사용하려면 , 실체 객체의 참조변수로 캐스팅해야한다.
		
		
		// 부모의 객체를 자식의 참조변수에 저장하는 것은 불가. ( 강제 or 명시적 형변환을 해줘야 한다. ) 
		CaptionTv c = (CaptionTv)t;
		
		
		Tv t2 = new Tv();
		//컴파일 타임에는 에러 없음. ( 부모 자식간의 상속의 관계가 맺어져있으면 컴페일 에러 안남 )
		//런타임에 ClassCastException
		//자식의 객체로 강제 형변환시에는 주의할 필요가 있다.
		// instanceof 이항 연산자를 통해서 미리 확인한다
		
		if(t2 instanceof CaptionTv){ // 변환해도 에러가 발생하지 않는지 체크
			CaptionTv c3 = (CaptionTv)t2;
			System.out.println("형변환 가능");
		}else{
			System.out.println("형변환 불가");
		}
	} //end of main
} // end of class

class Tv{
	String name = "";
}


class CaptionTv extends Tv{
	boolean caption;
}



728x90
반응형

'Java' 카테고리의 다른 글

Java 다형성 ( polymorphism ) 의 예제(2)  (0) 2017.07.12
Java 다형성 ( polymorphism ) 의 예제(1)  (0) 2017.07.12
Java 캡슐화 (Encapsulation)란?  (0) 2017.07.12
Java 간단한 Singleton 예제  (0) 2017.07.12
Java instanceof란?  (0) 2017.07.12

댓글