클래스의 형변환
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(); //자식 메서드 사용 가능
}
}