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 한 클래스에서 구현한다.