[자바 입문] 클래스 형변환
클래스 형변환
부모타입으로 자식객체를 참조하게 되면 부모가 가지고 있는 메소드만 사용할 수있다.
자식객체가 가지고 있는 메소드나 속성을 사용하고 싶으면 형변환을 해야한다.
형변환
public class Car{
public void run(){
System.out.println("Car의 run메소드");
}
}
public class Bus extends Car{
public void ppangppang(){
System.out.println("빵빵.");
}
}
부모 타입으로 자식객체를 참조할 수 있다.
부모타입으로 자식객체를 참조하게 되면 부모가 가지고 있는 메소드만 사용할 수 있다.
public class BusExam{
public static void main(String args[]){
Car car = new Bus();
car.run();
car.ppangppang(); // 컴파일 오류 발생
}
}
ppangppang()메소드를 호출하고 싶다면 Bus타입의 참조변수로 참조해야 한다.
public class BusExam{
public static void main(String args[]){
Car car = new Bus();
car.run();
// car.ppangppang(); 컴파일 오류 발생
Bus bus = (Bus) car; // 부모타입을 자식타입으로 형변환
bus.run();
bus.ppangppnag();
}
}
객체들 끼리도 형변환이 가능하다. 단, 상속관계에 있어야 한다.
부모타입으로 자식타입의 객체를 참조할 때는 묵시적으로 형변환이 일어난다.
부모타입의 객체를 자식타입으로 참조하게 할때는 명시적으로 형변환을 해주어야 한다. 단, 이렇게 형변환 하는 경우에는 부모가 참조하는 인스턴스가 형변환 하려는 자식타입일 때만 가능하다.
클래스 형변환 실습(1)
https://school.programmers.co.kr/learn/courses/5/lessons/394
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
public class GasStation{
public static void main(String[]args){
GasStation gasStation = new GasStation(); //gasStation인스턴스 생성
Suv suv = new Suv(); //suv 인스턴스 생성
Truck truck = new Truck(); //truck 인스턴스 생성
Bus bus = new Bus(); //bus 인스턴스 생성
//gasStation에서 suv에 기름을 넣습니다.
gasStation.fill(suv);
//gasStation에서 truck에 기름을 넣습니다.
gasStation.fill(truck);
//gasStation에서 bus에 기름을 넣습니다.
gasStation.fill(bus);
}
public void fill(Suv suv){
System.out.println("Suv에 기름을 넣습니다.");
suv.gas += 10;
System.out.println("기름이 "+suv.gas+"리터 들어있습니다.");
}
public void fill(Truck truck){
System.out.println("Truck에 기름을 넣습니다.");
truck.gas += 10;
System.out.println("기름이 "+truck.gas+"리터 들어있습니다.");
}
public void fill(Bus bus){
System.out.println("Bus에 기름을 넣습니다.");
bus.gas += 10;
System.out.println("기름이 "+bus.gas+"리터 들어있습니다.");
}
}
클래스 형변환 실습(2)
https://school.programmers.co.kr/learn/courses/5/lessons/908#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
public class GasStation{
public static void main(String[]args){
GasStation gasStation = new GasStation(); //gasStation인스턴스 생성
Suv suv = new Suv(); //suv 인스턴스 생성
Truck truck = new Truck(); //truck 인스턴스 생성
Bus bus = new Bus(); //bus 인스턴스 생성
//gasStation에서 suv에 기름을 넣습니다.
gasStation.fill(suv);
//gasStation에서 truck에 기름을 넣습니다.
gasStation.fill(truck);
//gasStation에서 bus에 기름을 넣습니다.
gasStation.fill(bus);
}
public void fill(Car car){
//참고. car.getClass().getName()은 car오브젝트가 실제로 어떤 클래스인지를 알려줍니다.
System.out.println(car.getClass().getName()+"에 기름을 넣습니다.");
car.gas += 10;
System.out.println("기름이 "+car.gas+"리터 들어있습니다.");
}
}
부모 타입인 Car로 한번에 받을 수 있다.