Car Sedan Class

public class Car  {

// member field
private boolean disel; // private은 파생 클래스에서 사용하지 못함
protected boolean gasoline; // protected은 파생 클래스에서 사용 가능하나 외부(다른 패키지)에서는 호출하지 못함
protected int wheel = 4;

// constructor
protected Car() { disel = true; gasoline = true; }
protected Car(int wheel) { this.wheel = wheel; disel = false; gasoline = false; }

// method
protected void Move()
{
if (disel)
System.out.println(“Disel Car”);
System.out.println(“Move wheel=” + wheel);
}

}

public class Sedan extends Car  {

// member field
private boolean gasoline; // 파생 클래스에서 기반클래스에 멤버필드명이 같다면 default는 자신의 멤버부터 호출 & 
this.gasoline을 사용함 

// constructor
public Sedan() { gasoline = false; } // 내부적으로 super() 호출
public Sedan(int wheel)  { super(wheel); gasoline = true; } //
super(int wheel)를 호출 – protected 생성자는 파생클래스에서 호출 가능

// method
public void sedanMove()
{

// base의 gasoline과 this의 gasoline을 구분해야하는 경우
if (super.gasoline)
System.out.print(“Gasoline Car “);
if (this.gasoline)
System.out.print(“Gasoline SedanCar “);

System.out.println(“move wheel=” + wheel);

}

static void Main(string[] args)
{

Car myCar = new Car(); // protected 생성자 같은 패키지 내에 사용가능.
myCar.move(); // protected 메소드 호출 가능
System.out.println(“myCar wheel=” +  myCar.wheel); // protected 필드 호출 가능

// 바퀴 4개 디젤 자동차
Sedan myCar1 = new Sedan(); // public 생성자 호출 가능
myCar1.move(); // protected 메소드 호출 가능
myCar1.sedanMove(); // public 메소드 호출가능

 

// 바퀴 6개 가솔린 자동차
Sedan myCar2 = new Sedan(6); // public 생성자 호출 가능
myCar2.move(); // protected 메소드 호출 가능
myCar2.sedanMove(); // public 메소드 호출가능

}

}