자바에서 extends와 implements는 아예 쓰임새가 다른데
잘 모르고 사용하다 보면 차이가 뭔지 헷갈린다
차례대로 한번 알아보자
먼저 extends인데
위의 ExtendsMe 클래스는 ExtendsImplements 클래스에서 상속받을 클래스이다
extends를 통해 ExtendsMe 클래스를 상속받고 객체화하면
부모 클래스(ExtendsMe)의 메소드, 변수를 사용할 수 있다
여기서 extends는 한 클래스만 가능하기 때문에
extends a, b 이런 식은 안된다
단 하나의 클래스에서만 extends를 받을 수 있다
실 테스트 시 코드는 아래와 같다
public class ExtendsMe {
public void extendsCall() {
System.out.println("ExtendsMe CALL!");
}
}
public class ExtendsImplements extends ExtendsMe {
public static void main(String[] args) {
ExtendsImplements ei = new ExtendsImplements();
ei.extendsCall();
}
}
다음으로는 implements인데
implements는 class가 아닌 interface를 가져오는 것이기 때문에
class가 아니라 interface를 작성해야 한다
이후 interface InterfaceMe, InterfaceMe2를 작성하고
메소드를 넣는데 메소드의 반환형과 이름만 작성하면 끝난다
안의 내용은 작성할 수 없는데
인터페이스는 implements 시 구현해야 할 메소드의 종류만 정의하고 실 구현은
implements 받은 클래스에서 구현한다
아래 스크린샷에서 InterfaceMe 인터페이스에서 call 메소드를 작성했기 때문에
InterfaceMe를 implements 받은 ExtendsImplements는 반드시 call 메소드를 작성해야 한다
(InterfaceMe2 도 마찬가지)
작성하지 않을 시 에러가 발생한다
그리고 implements는 extends와 다르게 여러 interface를 implements 가능하다
테스트용 코드는 아래와 같다
public interface InterfaceMe {
public void call();
}
public interface InterfaceMe2 {
public void call2();
}
public class ExtendsImplements implements InterfaceMe {
@Override
public void call() {
System.out.println("interface에 작성한 method는 implements 시 반드시 작성해야 함");
}
public static void main(String[] args) {
ExtendsImplements ei = new ExtendsImplements();
ei.call();
}
}
마지막으로 java에서 extends와 implements의 차이를 알아보자면
extends
객체화 시 상속받은 부모 클래스의 메소드와 변수를 사용 가능, 여러 클래스에서 상속 불가
implements
여러 interface를 implements 가능, 메소드는 이름과 반환형만 정의하고 실 구현은 implements 한 클래스에서 구현