스마트 인재개발원/Java

2021-04-26 자바 업캐스팅 다운캐스팅

앨런튜링_ 2021. 4. 26. 13:38
package ex_03;


public class Main {

	public static void main(String[] args) {
		//추상화 ? 여러객체에서 공통적으로 사용되는 기능들을 뽑아내는 것 
		
		Porche po = new Porche();
		Volvo vol = new Volvo();
		
		po.runner();
		po.wet();
		po.color = "빨강이";
		System.out.println(po.getTire());
		
		
		System.out.println();
		
		vol.runner();
		vol.pilot();
		
		//추상클래스는 객체화 할 수 없다.
		//상속을 통하여 무언가 기능을 꼭 구체화 하여 정의해야 할 때 추상화를 사용한다. 
		// Car c = new Car();
		

	}

}
​
package ex_03;

public class Porche extends Car{

	//일반 클래스에서 부모클래스를 물려받으면
	//부모의 기능을 사용하거나 사용하지 않거나 결정을 할 수 있다.
			
	//물려받는 추상메소드에 대하여 .
	//구체적인 기능을 구현해줘야 한다. 
	//추상 클래스를 물려 받는 경우에는 부모로부터 지정되어 있는 메소드를 꼭 오버라이딩 해야한다. 		
	
	@Override
	public void runner() {
		System.out.println("부드러운 코너링");
		
	}
	
	//포르쉐만이 갖는 기능
	public void wet() {
		System.out.println("도로가 젖어 있습니다. 시스템을 최적화 하겠습니다.");
	}
	

}
​
package ex_03;

//추상클래서 만들기 
//abstract
//추상클래스는 하나 이상의 추상 메소드를 포함하고 있어야 한다. 

public abstract class Car {

	//운전을 할 수 있는 기능 -> 추상 메소드 변경
	//추상 메소드는 구체적인 내용을 가질 수 없다. - 몸체를 가질 수 없다. 로직이나 기능을 설정하지 않는다. 
	public abstract void runner();
	
	int tire =4;
	String color;
	
	//타이어 개수를 확인하기 위한 메소드
	public int getTire() {
		
		return tire;
		
	}
	
	
	
}
package ex_03;

public class Volvo extends Car {

	@Override
	public void runner() {
	 
		System.out.println("안전성과 크리스탈 기어봉이 있습니다.");
		
		
	}
	
	public void pilot() {
		System.out.println("반자율주행 모드를 시작합니다. ");
	}

}