JAVA extends, implements 차이

박수민·2024년 3월 14일

상속(Inheritance)이란?

자바에서 상속이란 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소이다.
상속은 상위 클래스와 하위 클래스로 나누어 상위 클래스의 멤버(필드, 메서드, 이너 클래스)를 하위 클래스와 공유하는 것을 의미한다.

Extends

  • 상속의 대표적인 형태다.
  • 부모의 메소드를 그대로 사용할 수 있으며 오버라이딩 할 필요 없이 부모에 구현되있는 것을 직접 사용가능하다.
class Animal {
	public Animal(){
		System.out.println("동물");
	}
}
 
public class Cat extends Animal{
	public Cat(){
	System.out.println("고양이");
	}
	
	 public static void main(String[] args) {
	  Cat cat1=new Cat(); //cat1 객체 생성
	 }
}

결과

동물
고양이

자바는 "다중상속"을 지원하지 않는다.

다중상속이란 부모클래스가 두개 이상 존재할 수 있다는 것인데, 자바에서는 이를 지원하지 않는다.

Implements


interface Animal {
    void speak(); // Animal 인터페이스에 speak라는 메서드를 추상 메서드로 정의
}

public class Cat implements Animal {
    public Cat() {
        System.out.println("고양이");
    }

    public void speak() {
        System.out.println("야옹");
    }

    public static void main(String[] args) {
        Cat cat1 = new Cat();
        cat1.speak();
    }
}

결과

고양이
야옹
  • implements의 가장 큰 특징은 이렇게 부모의 메소드를 반드시 오버라이딩(재정의)해야 한다.
  • 또한 implements는 다중상속을 대신해준다.
    ex)
    	public class Son implements Father, Mother{...}

extends 와 implements 의 차이는 뭘까?

메소드나 변수를 '구현'하는가 그대로 '사용'하는가에 따라서 상속의 형태가 갈리게 된다.

  • extends
    • 부모에서 선언 / 정의를 모두하며 자식은 메소드 / 변수를 그대로 사용할 수 있다.
  • implements (interface 구현)
    • 부모 객체는 선언만 하며 정의(내용)은 자식에서 오버라이딩 (재정의) 해서 사용해야한다.
  • abstract
    • extends와 interface 혼합. extends하되 몇 개는 추상 메소드로 구현되어 있다.

extends는 부모 클래스를 상속하기 위한 키워드이고, implements는 구현할 인터페이스를 불러오기 위한 키워드이다.

지난 글에서 본 내용을 떠올리면 자바에서 클래스는 다중 상속이 불가능하지만 인터페이스는 여러 개를 불러올 수 있다고 한다.

따라서 extends 뒤에는 하나의 클래스만 작성해야하며, implements 뒤에는 여러 개의 인터페이스를 작성해도 된다.

요약하자면

extends : 클래스 상속을 위해 사용하는 키워드

  • 하나의 클래스만 상속 가능.
  • 두 개 이상의 클래스 상속을 시도하면 에러 발생한다.

implements : 인터페이스 구현을 위해 사용하는 키워드

  • 여러 개의 인터페이스를 불러올 수 있다.
  • 불러온 인터페이스의 모든 메소드를 재정의해서 사용해야 한다.

0개의 댓글