extends vs implements

김서영·2024년 9월 27일
0

extends vs implements


✨ 상속이란?


상자 하나하나는 모두 객체(Object)이고, 자바 용어로는 Class이다.

이러한 계층을 표현하기 위해 만들어진 것이 상속이다.

상속 시, 하위 객체(자식)은 상위 객체(부모)의 특징(메서드, 변수 등)을 물려받게 된다.

이 때, 상위 객체(부모)의 특징(메서드, 변수 등)을 '새롭게 구현'하는 것인지, '그대로 사용'하는 것인지에 따라 상속의 형태가 갈리게 된다.

✨ extends

상속의 대표적인 형태
모든 선언/정의를 부모가 하며, 자식은 오버라이딩 할 필요 없이 부모의 메서드/변수를 그대로 사용할 수 있다.

물론, 필요에 따라 오버라이딩 가능하다.

🔶 예제 코드

 class Vehicle {
    protected int speed = 3;

    public int getSpeed(){
      return speed;
    }
    public void setSpeed(int speed){
      this.speed = speed;
    }
  }

  class Car extends Vehicle{
    public void printspd(){
      System.out.println(speed);
    }
  }

  public class ExtendsSample {
    public static main (String[] args){
      Car A = new Car();
      System.out.println(A.getSpeed());
      A.printspd();
    }
  }

위에서 Car 클래스는 Vehicle 클래스의 변수와 메서드를 상속 받았다.

따라서, Car 클래스는 Vehicle 클래스의 speed, getSpeed(), setSpeed()을 사용할 수 있다.

하지만, Java는 "다중 상속"을 지원하지 않기 때문에 부모 클래스가 2개이상 존재 할 수는 없다.

대신에 implements를 사용해 여러 interface를 상속받을 수 있다.

✨ implements

부모는 선언만 하며, 반드시 자식이 정의를 오버라이딩해서 사용해야 한다.

🔶 예제 코드

 interface TestInterface{
    public static int num = 8;
    public void fun1();
    public void fun2();
  }

  class InterfaceExam implements TestInterface{
    @Override
    public void fun1(){
      System.out.println(num);
    }

    @Override
    public void fun2() {

    }
  }

  public class InterfaceSample{
    public static void main(String args[]){
      InterfaceExam exam = new InterfaceExam();
      exam.fun1();
    }
  }

추가적으로, abstract라는 것도 있다.

✨ abstract

extends와 interface의 혼합이다.
extends를 사용하지만, 몇 개는 추상 메서드로 구현이 되어있는 형태이다.

✨ 정리

extends는 클래스 한 개만 상속 받을 수 있으며, 자식 클래스는 부모 클래스의 기능을 사용할 수 있다.

implements는 여러 개의 interface를 상속 받을 수 있으며, 자식 클래스는 부모의 기능을 무조건 다시 정의해서 사용해야 한다.

profile
개발과 지식의 성장을 즐기는 개발자

0개의 댓글

관련 채용 정보