JAVA 기초

JAVA 11-1

Vanillwa 2023. 8. 25. 21:28

클래스의 형변환

 

Parent 클래스 (부모)

package ex1_class_casting;

public class Parent {
	public Parent() {
		System.out.println("부모(Parent)의 생성자");
	}
}

 

Child 클래스 (자식)

package ex1_class_casting;

public class Child extends Parent {
	
	public void info_Child() {
		System.out.println("자식 함수 호출");
	}
}

 

Main 클래스

package ex1_class_casting;

public class Main {
	public static void main(String[] args) {
		//형변환 : 기본 자료형 -> 다른 자료형 변환
		//클래스 자동 형변환 : 상속 관계에 있는 자식클래스를
		//부모 타입의 객체로 변환하는것을 의미
		double d = 100;
		
		//부모클래스 객체명 = new 자식클래스();
		//자식클래스 객체명 = new 자식클래스();
		//부모클래스 객체명 = 자식객체;
		
		Parent p1 = new Parent(); //부모 객체 생성
		Child c1 = new Child(); //자식 객체 생성
		
		Parent p2 = new Child(); //자동 형변환
		Parent p3 = c1; //자동 형변환
		
		//Child c2 = p1; //자동 형변환 불가
		
		c1.info_Child();
		//p2.info_Child(); 부모 타입으로 바꾸면 자식에게 있는 메서드는 사용 불가
	}
}

실행 결과


 

예제)

 

Calendar 클래스 (부모)

package ex2_calendar;

public class Calendar {
	String color;
	int months;
	
	public Calendar(String color, int months) {
		this.color = color;
		this.months = months;
	}
	
	void info() {
		System.out.printf("%s 달력은 %d월까지 있습니다.\n",color,months);
	}
	
	void hanging() {
		System.out.printf("%s 달력을 벽에 걸 수 있습니다.\n",color);
	}
}

 

DeskCalendar 클래스 (자식)

package ex2_calendar;

public class DeskCalendar extends Calendar{
	public DeskCalendar(String color, int months) {
		super(color, months);
	}
	
	@Override
	void hanging() {
		System.out.printf("%s 달력을 걸기 위해 고리가 필요합니다.\n",color);
	}
	
	public void onTheDesk() {
		System.out.printf("%s 달력을 책상에 세울 수 있습니다.\n",color);
	}
}

 

Main 클래스

package ex2_calendar;

public class CalMain {
	public static void main(String[] args) {
		DeskCalendar dc = new DeskCalendar("보라색", 6);
		dc.info();
		dc.hanging();
		dc.onTheDesk();
		
		System.out.println();
		
		Calendar c = new DeskCalendar("검은색", 12);
		c.info();
		c.hanging(); //오버라이딩 된 메서드가 호출된다
		//c객체가 Calendar 타입이지만 DeskCalendar의 객체기 때문에
		//오버라이딩 된 hanging()이 호출됐다.
	}
}

실행 결과


 

클래스 강제 형변환

 

Bike 클래스 (부모)

package ex3_bike;

public class Bike {
	//클래스 강제 형변환
	//부모 타입으로 변환을 하면 자식클래스의 요소에 접근이 불가능
	//접근하기 위해선 다시 자식타입으로 변경해야 함
	//(자식타입)부모타입객체.메서드();
	
	//자식클래스 객체명 = (자식클래스)부모객체;
	
	String riderName;
	int wheel = 2;
	
	public Bike(String riderName) {
		this.riderName = riderName;
	}
	
	public void info() {
		System.out.printf("%s의 자전거는 %d발 자전거 입니다.\n", riderName,wheel);
	}
	
	public void ride() {
		System.out.println("씽씽");
	}
}

 

FourWheelBike 클래스 (자식)

package ex3_bike;

public class FourWheelBike extends Bike {
	public FourWheelBike(String riderName) {
		super(riderName);
	}
	
	@Override
	public void info() {
		super.info();
	}
	
	public void addwheel() {
		if(wheel ==2) {
			wheel =4;
			System.out.println(riderName+"의 자전거에 보조바퀴를 장착했습니다.");
		}
		else
			System.out.println(riderName+"의 자전거에 이미 보조바퀴가 있습니다.");
	}
}

 

Main 클래스

package ex3_bike;

public class BikeMain {
	public static void main(String[] args) {
		Bike b = new FourWheelBike("윤기");
		b.info();
		b.ride();
		//b.addWheel(); -> 부모타입으로는 호출 불가
		System.out.println();
		
		FourWheelBike fwb = (FourWheelBike)b;//강제 형변환
		
		fwb.info();
		fwb.ride();
		fwb.addwheel(); //자식 메서드 사용 가능
	}
}

실행 결과

'JAVA 기초' 카테고리의 다른 글

JAVA 11-3  (0) 2023.08.25
JAVA 11-2  (0) 2023.08.25
JAVA 10-HW  (0) 2023.08.24
JAVA 10-2  (0) 2023.08.24
JAVA 10-1  (0) 2023.08.24