Java
extends, implements
hs_developer
2022. 6. 24. 21:52
자바에서는 extends와 implements로 타 클래스의 내용을 그대로 가져와 사용할 수 있다. 이걸 상속이라 한다.
extends와 implements는 쓰임새가 아예 다르다.
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(); // ExtendsMe CALL!
}
}
extends로 ExtendsMe 클래스를 상속 받고 객체화하면 부모 클래스인 ExtendsMe의 메서드와 변수를 사용할 수 있다.
여기서 extends는 한 클래스에서만 가능하기 때문에 extends a, b 같은 건 안된다.
implements는 class가 아닌 interface를 가져오기 때문에
class가 아니라 interface로 작성한다.
interface InterfaceMe
{
public void call();
}
interface InterfaceMe2
{
public void call2();
}
public class ExtendsImplement implements InterfaceMe, InterfaceMe2 {
@Override
public void call() {
System.out.println("interface call!!");
}
@Override
public void call2() {
}
public static void main(String[] args) {
ExtendsImplement ei= new ExtendsImplement();
ei.call(); // interface call!!
}
}
인터페이스는 implements시 구현해야 할 메서드의 종류만 정의하고 실구현은 implements 받은 클래스에서 구현한다.
위 예제에서 InterfaceMe 인터페이스에서 call 메서드를 작성했기 때문에
InterfaceMe를 implements 받은 ExtendsImplement는 반드시 call 메서드를 작성해야 한다.
그리고 implements는 extends와 다르게 여러 interface를 implements 하는 게 가능하다.
extends
- 객체화 시 상속 받은 부모 클래스의 메서드와 변수 사용 가능, 여러 클래스에서 사용 불가하다.
implements
- 여러 interface를 implements 가능, 메서드는 이름과 반환형만 정의하고 실 구현은 implements 한 클래스에서 구현한다.