public class Car2 {
int a = 7;
void move() {
System.out.println("차 이동...");
}
}
// 상속
// extend --> class를 상속할 때
// in --> interface를 상속할 때
// 상속.1
class Bus extends Car2 {
int a = 25;
@Override
void move() {
System.out.println("40명 태우고 이동");
}
}
// 상속.2
class Ambulance extends Car2 {
int a = 100;
@Override
void move() {
System.out.println("사이렌 울리며 이동");
}
void special() {
System.out.println("환자를 태우고 있다");
}
void printa() {
System.out.println("Ambulance a ->" + this.a);
}
}
// 상속3
class FireEngine extends Car2 {
int a = 11;
@Override
void move() { // 만일 이게 없는데 move를 사용하려고 하면 아버지꺼 가져옴
System.out.println("물 뿌리면서 이동");
}
}
public class Car2Ex {
public static void main(String[] args) {
Car2[] cars = new Car2[3];
//부모객체에 자식 객체 대입 가능
cars[0] = new Bus();
cars[1] = new Ambulance();
cars[2] = new FireEngine();
for(Car2 car : cars) {
// 메소드 실행은 부모와 같은 이름의 자식 메소드가 실행
car.move();
// 멤버변수는 부모것만 적용된다
System.out.println("for Car2 -->" + car.a); //
// car.special(); move()메소드는 부모에 있지만 special()메소드는 부모에 없기 때문에 실행 불가능
// 만일 special()메소드를 실행하려면 밑에 처럼 Car2 타입을 Ambulance 타입으로 변환해서
// 별도의 Ambulance 객체를 생성해야한다.
if (car instanceof Ambulance) { // car가 가지고있는 객체안에 ambulance 타입이 있느냐
Ambulance amb = (Ambulance) car;
amb.special();
amb.printa(); // 여기서는 100이 나오는데 그 이유는 ambulance로 타입변환해서 가능
System.out.println("amb Car2 -->");
}
}
}
}
40명 태우고 이동
for Car2 -->7
사이렌 울리며 이동
for Car2 -->7
환자를 태우고 있다
Ambulance a ->100
amb Car2 -->
물 뿌리면서 이동
for Car2 -->7