/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Demo040401_Car {
int door;//문 갯수
Demo040401_Car(){
this(null,0);//기본 생성자가 매개변수를 보유한 생성자 호출
}
public Demo040401_Car
(String color,
int door
) { this.color=color;//매개변수를 인스턴스 전역변수에 넣어줍니다.
this.door=door;
}
public void drive(){//시동 부르릉
System.
out.
println("brrrrrr~~~"); }
public void stop(){//멈춤 삐삐!!
System.
out.
println("장비를 정지합니다. 어? 안돼잖아??????"); }
public void overriding(){//부모 메소드를 오버라이딩합니다.
System.
out.
println("Car Overriding"); }
}
class Demo040401_FireEngine extends Demo040401_Car {
public Demo040401_FireEngine() {
this(null,0);//기본생성자가 매개변수를 보유한 생성자를 호출
}
public Demo040401_FireEngine
(String color,
int door
) { super(color, door);//자식 객체는 부모객체에게 매개변수를 제공
}
public void water(){//불이났습니다 물뿌려주세요
System.
out.
println("야 꺼 불꺼! 불이야 불! 도와주세요!"); }
public void overriding(){//부모의 메소드를 오버라이딩합니다.
System.
out.
println("Fire Overriding"); }
public void Caroverriding(){
super.overriding();//오버라이딩한 메소드의 부모 메소드를 호출합니다.
}
}
class Demo040401_Main {
public static void main
(String[] args
) {
Demo040401_Car car = null;
//부모타입변수 = null
Demo040401_FireEngine f1= new Demo040401_FireEngine();
//자식타입변수 = 자식객체
Demo040401_FireEngine f2= null;
//자식타입변수 = null
f1.water();
car= f1;
//부모타입변수 = 자식타입객체
//car.water(); 부모는 자식의 메소드가 없기때문에 사용할수없다
f2=(Demo040401_FireEngine)car;
//자식타입변수 = (자식타입형변환)부모타입객체
f2.water();
//오버라이딩의 다형성
f1.overriding();//자식의 메소드를 호출
car.overriding();//자식의 메소드를 호출
f2.overriding();//자식의 메소드를 호출
f1.Caroverriding();//super를 사용한 부모의 메소드를 강제 호출
}
}