package Abstract;
//추상클래스 : abstract class A {
//하나 이상의 추상 메소드가 있으면, 그 클래스는 추상 클래스이어야 합니다.
//추상 메소드와 추상변수로 이루어진다.
//다른 점 : 객체를 절대로 생성이 불가합니다.
abstract class Shape{
abstract void draw(); //설계만 하고, 내용이 없습니다.
}
class Rectangle extends Shape{
@Override // : 추상 메소드 오버라이딩
void draw() {
System.out.println("1. 사각형을 아주 멋지게 만듭니다.");
}
}
class Circle extends Shape{
@Override
void draw() {
System.out.println("2. 원형을 아주 예쁘게 만듭니다.");
}
}
class Triangle extends Shape{
@Override
void draw() {
System.out.println("3. 삼각형을 아주 멋드러지게 만듭니다.");
}
}
public class AbstractSample1 {
public static void main(String[] args) {
Rectangle rt = new Rectangle();
Circle cc = new Circle();
Triangle tg = new Triangle();
rt.draw();
cc.draw();
tg.draw();
}
}
--------------------------------------------------------------
package Abstract;
/* 현대 자동차가 있습니다.
* 자동차에 대하여 상태를 표시하는 메소드를 구현하여 보세요.
* 1. 자동차가 출발합니다.
* 2. 자동차가 운행중입니다.
* 3. 자동차가 좌회전을 합니다.
* 4. 자동차가 우회전을 합니다.
* 5. 자동차가 후진을 합니다.
* 6. 자동차가 정지합니다.
*/
abstract class State{
abstract void gear();
}
class Start extends State{
void gear(){
System.out.println("1. 자동차가 출발합니다.");
}
}
class Drive extends Start{
void gear(){
System.out.println("2. 자동차가 운행중입니다.");
}
}
class Left extends Drive{
void gear(){
System.out.println("3. 자동차가 좌회전을 합니다.");
}
}
class Right extends Left{
void gear(){
System.out.println("4. 자동차가 우회전을 합니다.");
}
}
class Back extends Right{
void gear(){
System.out.println("5. 자동차가 후진을 합니다.");
}
}
class Stop extends Back{
void gear(){
System.out.println("6. 자동차가 정지합니다.");
}
}
public class AbstractSample2 {
public static void main(String[] args) {
Start st = new Start();
Drive dr = new Drive();
Left le = new Left();
Right ri = new Right();
Back ba = new Back();
Stop so = new Stop();
st.gear();
dr.gear();
le.gear();
ri.gear();
ba.gear();
so.gear();
}
}