👩🏻‍💻 TIL

[Java] extends implements 차이

ji-hyun 2022. 6. 12. 19:59

extends 와 implements 의 차이는 뭘까?

 

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

 

  1. extends
    • 부모에서 선언 / 정의를 모두하며 자식은 메소드 / 변수를 그대로 사용할 수 있음

 

  1. implements (interface 구현)
    • 부모 객체는 선언만 하며 정의(내용)은 자식에서 오버라이딩 (재정의) 해서 사용해야함

 

  1. abstract
    • extends와 interface 혼합. extends하되 몇 개는 추상 메소드로 구현되어 있음

 

 

 

1. Extends

  • 사실 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을 상속 받았다. 그리고 getSpeed() 메소드로 speed를 print 했다.
그런데 vehicle의 getSpeed 메소드에서 speed를 직접 바로 사용했다. extends 를 했으니 메소드 뿐만 아니라 변수까지 사용이 가능해 지는 것이다.
여기서 접근 제어자에 대해 다시 설명하지면.....

 

All 상속 OR 동일패키지 상속 && 동일패키지 클래스 내부

 

순서대로 public, protected, default, private 이다.

 

그리고 자바는 "다중상속"을 지원하지 않는다고 한다.

 

 

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

즉 , public class Son extends Father, Mother{...} 이것이 지원하되지 않는다는 것이다.

 

자바는 다중상속을 지원하지 않는다. 대신 implements(인터페이스)가 등장했다.

 

 

 

 

 

 

 

2. 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();
  }
}

 

implements의 가장 큰 특징은 이렇게 부모의 메소드를 반드시 오버라이딩(재정의)해야 한다.

또한 이 implements는 다중상속을 대신해준다.

 

public class Son implements Father, Mother{...}

 

 

 

 

간단 정리

  1. extends는 일반 클래스와 abstract 클래스 상속에 사용되고, implement는 interface 상속에 사용된다.
  2. class가 class를 상속받을 땐 extends를 사용하고, interface가 interface를 상속 받을 땐 extends를 사용한다.
  3. class가 interface를 사용할 땐 implements를 써야하고
  4. interface가 class를 사용할 땐 implements를 쓸수 없다.
  5. extends는 클래스 한 개만 상속 받을 수 있다.
  6. extends 자신 클래스는 부모 클래스의 기능을 사용한다.
  7. implements는 여러개 사용 가능하다.
  8. implements는 설계 목적으로 구현 가능하다.
  9. implements한 클래스는 implements의 내용을 다 사용해야 한다.

 

 

 

class가 class를 상속받는 건 extends,
interface가 interface를 상속받는 것도 extends, (interface끼리도 상속가능)
class가 interface를 상속받는 것만 implements
interface가 class를 상속받는 건 불가능 (애초에 interface는 구현을 목적으로 만들어진 것 입니다

 

 

 

 

 

 

이 포스트는 아래 블로그를 온전히 참고한 글입니다.

https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4

 

자바 extends, implements 차이

상속이란 (Inheritance) 상속을 말하기 전에 먼저 OOP가 무엇인지 알면 좋을거 같다.OOP(Object-Oriented Programming, 객체 지향 프로그래밍) 이란? OOP의 특징으로 1. 상속과 인터페이스 (계층성) 2. 다형성, 사

velog.io

 

 

 

 

'👩🏻‍💻 TIL' 카테고리의 다른 글

only one auth mechanism allowed  (0) 2022.09.19
[Java] 추상 클래스와 인터페이스  (0) 2022.06.12
nexus-graphql-mongoose-boilerplate 1일차  (0) 2022.05.15
npm 과 npx 차이  (0) 2022.05.14
graphQL 예외처리  (0) 2022.05.08