Back-end/Java

추상클래스

douStory 2021. 8. 4. 14:59
728x90

추상메소드는 속빈 껍데기

  • 물려받은 빚이다. 물려받은 일을 본인한테 맞게 해야한다. 무시할 수 없고 꼭 구현해야한다.
  • 그리고 빚을 다값을때까지 클레스 앞에는 abstract 가 붙는다 like.. 빚쟁이마크
  • 그리고 대대손손 물려준다고 이해하면 편하다

 

추상클레스안에 템플릿 메소드를 넣어놓고 메소드 수행 순서를 고정시켜 놓을 수도 있다.

템플릿 메소드는 final 로 선언해서 고정한다

 

 

근데 왜 오버라이딩을 써도 되는데 왜 추상메소드로 사용할까?

설계단계에서 용이하기때문에.. 꼭 구현해야하는 메소드를 놓치지 않을 수 있다..

그러나 실무에서 잘 쓰지는 않는다고 한다..

 

밑의 예제를 써보면 추상클래스에 대한 이해가 쉽다..

결과..

// Cartest

package carDemo;

public class CarTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Bus bus = new Bus();
		AutoCar autoCar = new AutoCar();
		
		bus.run();
		autoCar.run();
		
		bus.refuel();
		autoCar.refuel();
		
		bus.takePassenger();
		autoCar.load();
		
		bus.stop();
		autoCar.stop();
	}

}


//car

package carDemo;

public abstract class Car {
	
	public abstract void run();
	public abstract void refuel();
	
	
	public void stop() {
		System.out.println("차가 멈춥니다.");
	}
}


//Bus

package carDemo;

public class Bus extends Car {
	
	public void run() {
		System.out.println("버스가 달립니다.");
	}
	
	public void refuel() {
		System.out.println("천연가스를 주유합니다.");
	}
	
	public void takePassenger() {
		System.out.println("승객을 버스에 태웁니다.");
	}
	
	
}



// AutoCar

package carDemo;

public class AutoCar extends Car {
	
	public void run() {
		System.out.println("자동차가 달립니다.");
	}
	
	public void refuel() {
		System.out.println("휘발류를 주유합니다.");
	}
	
	public void load() {
		System.out.println("짐을 실습니다.");
	}
}