객체 배열을 생성해서 자동차와 요트를 받고, 메소드 호출 받기
package quiz01;
class Vehicle {
private int number;
public Vehicle(int number) {
this.number = number;
}
}
public class Ex06 {
public static void info(Vehicle vehicle) {
// [문제] 메소드 호출
vehicle.drive();
vehicle.sail();
}
public static void main(String[] args) {
Vehicle[] myVehicle = new Vehicle[2];
myVehicle[0] = new Car(1350);
info(myVehicle[0]);
myVehicle[1] = new Yacht(679111);
info(myVehicle[1]);
}
}
1. 배열의 길이가 2인 Vehicle 타입의 객체를 생성
[0] = Car 생성
[1] = Yacht 생성
2. info() 메소드 호출
info 메소드에 [0] 인 Car 를 입력 받으면
vehicle 참조변수에 저장되는데 Vehicle 타입으로 받아왔으니 강제형변환으로 ((Car)vehicle).drive();
그 다음으로 info 메소드에 [1] 인 Yacht 를 입력 받았는데
Yacht 에는 dirve() 가 없음 그렇담 ((Yacht)vehicle).sail(); 해주면 되는데
((Car)vehicle).drive();
((Yacht)vehicle).sail();
이렇게만 하면 에러가 발생됨
왜냐면 [0] 에는 sail()가 없으니깡
조건식을 걸어서 해당 메소드가 있을 때 해당하는 조건식에 맞춰서 실행하도록 조건문 걸기
3. 부모와 자식 클래스 메소드 정의해주기
부모 클래스의 필드의 접근 제어자가 private 라서 접근할 수 없으니
setter/getter 를 사용해주면 되는데 , 자식을 생성하면서 값을 받으니 수정할 필요가 없어서
getter 만 정의해줘도 됨 -> getName 으로 받아 이제 자식에서 값을 저장할 것임
부모 클래스에서 수정할 건 했으니 자식 클래스만 수정하면 됨
원하는 출력값은
자동차 등록번호 : 1350
자동차가 고속도로를 달립니다.
요트 등록번호 : 679111
요트가 한강 위를 떠다닙니다.
그럼 이제 자식 클래스에서 알맞게 정의해주면 된다
super -> 부모의 필드를 받아옴
(만약 자식 필드에서 가져오는 거였음 this 사용하면 됨)
package quiz01;
class Vehicle {
private int number;
public Vehicle(int number) {
this.number = number;
}
public int getNumber() {
return this.number;
}
}
class Car extends Vehicle {
public Car(int number) {
super(number);
}
public void drive() {
System.out.println("자동차 등록번호 : " + super.getNumber());
System.out.println("자동차가 고속도로를 달립니다.");
}
}
class Yacht extends Vehicle {
public Yacht (int number) {
super(number);
}
public void sail() {
System.out.println("요트 등록번호 : " + super.getNumber());
System.out.println("요트가 한강 위를 떠다닙니다.\n");
}
}
public class Ex06 {
public static void info(Vehicle vehicle) {
// [문제] 메소드 호출
if (vehicle instanceof Car) {
((Car) vehicle).drive();
} else if (vehicle instanceof Yacht) {
((Yacht)vehicle).sail();
}
}
public static void main(String[] args) {
Vehicle[] myVehicle = new Vehicle[2];
myVehicle[0] = new Car(1350);
info(myVehicle[0]);
myVehicle[1] = new Yacht(679111);
info(myVehicle[1]);
}
}
'Language > JAVA' 카테고리의 다른 글
JAVA 자바 활용 백엔드 개발 기초 연습 문제 - 일반 클래스에서 인퍼페이스 로 변경하기 (0) | 2024.04.19 |
---|---|
JAVA 자바 활용 백엔드 개발 기초 연습 문제 - 일반 클래스에서 추상 클래스로 변경하기 (0) | 2024.04.19 |
JAVA 자바 활용 백엔드 개발 기초 연습 문제 - 추상 클래스와 추상 메소드 선언 후 상속 받기 (0) | 2024.04.18 |
JAVA 자바 활용 백엔드 개발 기초 연습 문제 - 추상 클래스와 추상 메소드 정의하기 (0) | 2024.04.18 |
JAVA 자바 활용 백엔드 개발 기초 연습 문제 - 상속 문제 (0) | 2024.04.17 |