아직 강의를 받기 전이라 자바 강의를 복습하면서 정리한 내용을 업로드한다!
클래스의 모든 메서드가 추상 메서드인 클래스를 순수 추상 클래스라고 한다. 순수 추상 메서드는 실행 로직이 없고 오직 다형성을 위한 부모 타입으로써 역할만 제공한다.
class
대신 interface
키워드를 사용, 구현 시 implements
키워드 사용인터페이스 자신은 구현을 가지고 있지 않기 때문에 다이아몬드 문제가 발생하지 않는다. 따라서 인터페이스의 경우 다중 구현을 허용하는 것이다. 아래는 InterfaceA와 InterfaceB를 구현한 Child 클래스이다. InterfaceA와 InterfaceB 둘 다 methodCommon()이라는 메서드가 있는 상황이지만, 구현은 Child에서 하면 되므로 문제 되지 않는다.
public class Child implements InterfaceA, InterfaceB {
@Override
public void methodA() {
System.out.println("Child.methodA");
}
@Override
public void methodB() {
System.out.println("Child.methodB");
}
// 양쪽 인터페이스에 다 있지만 같은 메서드이므로 구현은 하나만 하면 된다.
@Override
public void methodCommon() {
System.out.println("Child.methodCommon");
}
}
클래스 상속과 인터페이스 구현을 함께 사용할 수 있다.
다음과 같은 추상 클래스와 인터페이스가 있다고 했을 때, extends
키워드와 implements
키워드를 함께 쓸 수 있다.
public abstract class AbstractAnimal {
public abstract void sound();
public void move() {
System.out.println("동물이 이동합니다.");
}
}
public interface Fly {
void fly();
}
클래스 상속과 인터페이스를 모두 사용한 Chicken 클래스이다. "extends AbstractAnimal implements Fly"로 작성해서 상속도 받고, 인터페이스 구현도 했다. 이렇게 모두 사용할 때는 extends
가 먼저 나와야 하는데, extends
를 통한 상속은 하나만 가능하고 implements
를 통한 인터페이스는 다중 구현이 가능하기 때문이다.
public class Chicken extends AbstractAnimal implements Fly {
@Override
public void sound() {
System.out.println("꼬끼오");
}
@Override
public void fly() {
System.out.println("닭 날기");
}
}