JAVA extends, implements 차이

박수민·2024년 3월 14일
0

상속(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개의 댓글