h-i-s-t-o-r-y

[Java] 클래스의 특징 - 다형성 / UpCasting, DownCasting 본문

Java

[Java] 클래스의 특징 - 다형성 / UpCasting, DownCasting

H' 2021. 7. 17. 23:14

> 다형성

ㄱ. 여러가지 형태를 가질 수 있는 능력
ㄴ. 자바에서의 다형성
    [한 타입의 참조변수]로 [여러타입의 객체]를 [참조]할 수 있도록 한 것
ㄷ. 더 구체적으로 말하자면
    조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 한 것
    ? 자손클래스로 조상클래스를 참조시킴

 

> UpCasting과 DownCasting

UpCasting : 자손클래스에서 조상클래스 타입으로 자동형변환

DownCasting : 조상클래스에서 자손클래스 타입으로 변환 cast 연산자 사용해야 한다.


package days18;

/**
 * @author Hini
 * @date 2021. 3. 31 - 오후 4:19:19
 * @subject	p.354~361 다형성(polymorphism)
 * @content
 *
 */
public class Ex13 {
	// 인스턴스 변수
	int age = 10;

	public static void main(String[] args) {
		// Cannot use this in a static context
		// static 메서드에선 인스턴스 변수를 사용할 수 없다.
		// this 키워드도 사용못함
		//this.age = 20;
		
		// 의문점 ? 
		// Circle obj1 아니고 Shape obj1 이라 하나 ? 
		
		Shape obj1 = new Circle();
		
		Point [] p = {
				new Point(100,100),
				new Point(140,50),
				new Point(200,100)
		};
		
		// 자식객체 생성해서 부모타입 참조
		// 상속관계
		// 서로 다른 클래스 간의 형변환
		
		// 자손타입->조상타입
		// ㄱ. 자동형변환 (Up-Casting)
		Shape obj2 = new Triangle(p);
		
		// 조상타입->자손타입
		// ㄴ. 강제형변환 (Down-Casting) - cast 연산자
		Triangle obj3 = (Triangle) obj2;
		
		
	}//main

}//class
package days19;

public class Ex04 {

	public static void main(String[] args) {
		// 다형성 + 자동 업캐스팅 (UpCasting)
		Employee emp1 = new Regular();
		
		// Cannot instantiate the type Employee
		// 추상클래스 이기에 객체를 생성할 수 없다.
		//Employee emp2 = new Employee();
		
		// 강제 다운캐스팅(DownCasting)
		// 자동 업캐스팅된 Regular 객체 emp1는 다운캐스팅이 가능하지만
		Regular emp3 = (Regular) emp1;
		
		// java.lang.ClassCastException: days19.Employee cannot be cast to days19.Regular
		// 업캐스팅 안된 Employee 객체 emp2는 다운캐스팅이 불가능
		//Regular emp3 = (Regular) emp2;
		
		System.out.println("END");
	}

}
Comments