[java] 추상 클래스와 인터페이스의 상속과 구현에 대한 예시

자바에서 추상 클래스와 인터페이스는 객체 지향 프로그래밍에 많은 유연성과 재사용성을 제공합니다. 이들을 상속하고 구현함으로써 클래스들 간의 관계를 정의하고 인스턴스를 생성할 수 있습니다. 이번 예시에서는 추상 클래스와 인터페이스의 상속과 구현에 대한 예시 코드를 살펴보겠습니다.

추상 클래스 상속 예시

abstract class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public abstract void sound();
    
    public void eat() {
        System.out.println(name + " is eating.");
    }
}

class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }
    
    @Override
    public void sound() {
        System.out.println("Woof!");
    }
}

위의 코드에서 Animal 클래스는 추상 클래스로 선언되었으며, sound 메서드는 추상 메서드입니다. Dog 클래스는 Animal 클래스를 상속하고, sound 메서드를 오버라이딩하여 개의 짖는 소리를 출력합니다.

인터페이스 구현 예시

interface Drawable {
    void draw();
}

class Circle implements Drawable {
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }
}

class Square implements Drawable {
    @Override
    public void draw() {
        System.out.println("Drawing a square");
    }
}

위의 코드에서 Drawable 인터페이스는 draw 메서드를 정의하고 있습니다. Circle 클래스와 Square 클래스는 Drawable 인터페이스를 구현하고 있으며, draw 메서드를 오버라이딩하여 각자의 도형을 그리는 동작을 구현합니다.

상속과 구현의 혼합 예시

abstract class Shape {
    abstract String getType();
}

interface Resizeable {
    void resize();
}

class Circle extends Shape implements Resizeable {
    @Override
    public String getType() {
        return "Circle";
    }
    
    @Override
    public void resize() {
        System.out.println("Resizing the circle");
    }
}

위의 코드에서 Shape 클래스는 추상 클래스로 선언되었으며 getType 메서드는 추상 메서드입니다. Resizeable 인터페이스는 resize 메서드를 정의하고 있습니다. Circle 클래스는 Shape 클래스를 상속하고 Resizeable 인터페이스를 구현하며, getType 메서드와 resize 메서드를 각각 오버라이딩하여 구현합니다.

이렇듯 자바에서는 추상 클래스와 인터페이스를 통해 다형성을 구현하고 더욱 유연한 코드를 작성할 수 있습니다.

참고 문서: Java 추상 클래스, Java 인터페이스