자바에서 추상 클래스와 인터페이스는 상속을 통해 다른 클래스에 기능을 제공하는 역할을 합니다. 하지만 추상 클래스와 인터페이스는 서로 다른 특징과 사용 방법을 가지고 있습니다. 이 글에서는 자바 추상 클래스와 인터페이스의 상속 관계에 대해 알아보도록 하겠습니다.
추상 클래스의 상속
추상 클래스는 일반 클래스와 마찬가지로 다른 클래스에 상속될 수 있습니다. 추상 클래스는 하나 이상의 추상 메서드를 가지고 있으며, 이를 상속받은 클래스에서 반드시 구현해야 합니다. 또한, 추상 클래스는 일반 메서드나 필드를 가질 수도 있습니다.
public abstract class AbstractClass {
// 추상 메서드
public abstract void method();
// 일반 메서드
public void commonMethod() {
System.out.println("This is a common method");
}
}
public class ConcreteClass extends AbstractClass {
// 추상 메서드 구현
@Override
public void method() {
System.out.println("This is an implemented method");
}
}
위의 예시 코드에서 AbstractClass
는 추상 클래스로, method
라는 추상 메서드를 정의하고, commonMethod
라는 일반 메서드를 정의합니다. 이 추상 클래스는 ConcreteClass
에서 상속받아 method
를 구현하고, commonMethod
를 사용할 수 있습니다.
인터페이스의 상속
인터페이스는 다른 인터페이스에 상속될 수 있습니다. 인터페이스는 추상 메서드만을 가지며, 이를 상속받은 인터페이스나 클래스에서 반드시 구현해야 합니다.
public interface ParentInterface {
void parentMethod();
}
public interface ChildInterface extends ParentInterface {
void childMethod();
}
public class ConcreteClass implements ChildInterface {
public void parentMethod() {
System.out.println("This is a method from parent interface");
}
public void childMethod() {
System.out.println("This is a method from child interface");
}
}
위의 예시 코드에서 ParentInterface
는 인터페이스로, parentMethod
라는 추상 메서드를 정의합니다. 이 인터페이스는 ChildInterface
에서 상속받아 childMethod
를 추가로 정의합니다. ConcreteClass
는 ChildInterface
를 구현하며, parentMethod
와 childMethod
를 구현합니다.
추상 클래스와 인터페이스의 관계
추상 클래스와 인터페이스는 상속 관계에 있을 수 있습니다. 추상 클래스가 인터페이스를 상속받는다면, 추상 클래스는 인터페이스의 추상 메서드를 구현해야 합니다. 이를 통해 추상 클래스는 인터페이스의 기능을 확장하고, 추가적인 구현을 할 수 있습니다.
public interface Interface {
void method();
}
public abstract class AbstractClass implements Interface {
@Override
public void method() {
System.out.println("This is a method implementation in abstract class");
}
}
위의 예시 코드에서 AbstractClass
는 추상 클래스로, Interface
를 상속받아 method
를 구현합니다. 이를 통해 AbstractClass
는 Interface
의 기능을 확장하고 사용할 수 있습니다.
결론
자바에서 추상 클래스와 인터페이스는 상속을 통해 기능을 제공하며, 상속 관계에 따라 다양한 구현이 가능합니다. 추상 클래스는 일반 메서드와 필드를 포함할 수 있으며, 인터페이스는 추상 메서드만을 가질 수 있습니다. 이를 통해 자바에서 다형성과 유연성을 높일 수 있습니다.
참고자료