JAVA

업캐스팅(Up Casting) 활용 | 21/12/22

S.I.B 2022. 1. 9. 23:53

 

코드 작성
package ex_type_casting;

public class Ex1 {

	public static void main(String[] args) {
		// 업캐스팅 연습
		// 1. 서브클래스 타입 인스턴스 생성
		SmartPhone 내폰 = new SmartPhone();
		
		
		// 서브클래스 타입으로 접근 가능한 메서드 : 4개
		내폰.call(); // 상속받은 메서드
		내폰.sms(); // 상속받은 메서드
		내폰.kakaoTalk(); // 서브클래스에서 직접 정의한 메서드
		내폰.youtube(); // 서브클래스에서 직접 정의한 메서드
		System.out.println("----------------------------------------");
		
		// 2. 슈퍼클래스 타입 변수 선언 및 서브클래스의 인스턴스 전달
		HandPhone 엄마폰 = 내폰; // 서브클래스타입 -> 슈퍼클래스타입(업캐스팅, 자동형변환)
		// => 참조변수 내폰이 가진 데이터(주소값)을 전달
		
		// 슈퍼클래스 타입으로 접근 가능한 메서드 : 2개
		엄마폰.call();
		엄마폰.sms();
		// 업캐스팅 시 참조한 가능한 영역의 축소가 일어나므로
		// 슈퍼클래스 타입으로 접근 가능한 메서드 개수가 줄어들게 됨
		// => 즉, 슈퍼클래스 내의 멤버와 동일한 멤버에만 접근 가능하게 됨
//		엄마폰.kakaoTalk(); // 에러 발생! 서브클래스에서 직접 정의한 메서드
//		엄마폰.youtube(); // 에버 발생! 서브클래스에서 직접 정의한 메서드
		
		System.out.println("----------------------------------------");

		
		// 또 다른 서브클래스 타입 인스턴스 생성
		SmartPhone 동생폰 = new SmartPhone();
		
		엄마폰 = 동생폰; // 서브클래스타입 -> 슈퍼클래스타입으로 업캐스팅
		엄마폰.call();
		엄마폰.sms();
		
		System.out.println("----------------------------------------");
		
		// 다운캐스팅 연습(허용되지 않는 경우)
		// 1. 슈퍼클래스의 인스턴스 생성
		HandPhone 엄마폰2 = new HandPhone();
		
		// 슈퍼클래스 타입으로 접근 가능한 메서드 :
		엄마폰2.call();
		엄마폰2.call();
		
		// 2. 서브클래스 타입 변수에 슈퍼클래스 인스턴스 전달
		// => 다운캐스팅 수행
//		SmartPhone 내폰2 = (SmartPhone) 엄마폰2;
//		내폰2.call();
//		내폰2.sms();
//		내폰2.kakaoTalk();
//		내폰2.youtube();
		
		System.out.println("----------------------------------------");
		
		// 다운캐스팅 연습(허용되는 경우)
		// 1. 서브클래스의 인스턴스 생성(업캐스팅 수행 포함)
		HandPhone 엄마폰3 = new SmartPhone(); // 업캐스킹
		엄마폰3.call();
		엄마폰3.sms();
		
		// 2. 서브클래스 타입으로 다운캐스팅
		SmartPhone 내폰3 = (SmartPhone) 엄마폰3; // 다운캐스팅
		내폰3.call();
		내폰3.sms();
		내폰3.kakaoTalk();
		내폰3.youtube();
		
	}

}


class HandPhone{
	
	public void call() {
		
		System.out.println("핸드폰의 전화 기능");
		
	}
	
	public void sms() {
		
		System.out.println("핸드폰의 문자 기능");
		
	}
	
}

// SmartPhone 클래스 정의 - HandPhone 클래스 상속

class SmartPhone extends HandPhone{
	
	public void kakaoTalk() {
		
		System.out.println("SmartPhone의 카톡 기능!");
		
	}
	
	public void youtube() {
		
		System.out.println("SmartPhone의 유튜브 기능!");
		
	}
}

업캐스팅(Up Casting) 다운 캐스팅(Down Casting) 을 활용한 연습!

출력 결과

핸드폰의 전화 기능
핸드폰의 문자 기능
SmartPhone의 카톡 기능!
SmartPhone의 유튜브 기능!
----------------------------------------
핸드폰의 전화 기능
핸드폰의 문자 기능
----------------------------------------
핸드폰의 전화 기능
핸드폰의 문자 기능
----------------------------------------
핸드폰의 전화 기능
핸드폰의 전화 기능
----------------------------------------
핸드폰의 전화 기능
핸드폰의 문자 기능
핸드폰의 전화 기능
핸드폰의 문자 기능
SmartPhone의 카톡 기능!
SmartPhone의 유튜브 기능!

 

나의 소감
   선생님이 아직 이해가 잘 안되냐고 물어보셔서 내가 전 시간에 생활과 밀접한 예시는 없냐고 여쭈어 봤더니 다음시간에
   이렇게 또 알기 쉽게 예시를 만들어서 설명해주셨다!
   우리 쌤 너무 친절하고 멋찌다! 감사합니다 ♡