만쥬의 개발일기

상속(Inheritance)이란?

객체지향 프로그래밍, OOP에는 다음과 같은 특징들이 있다.

1. 상속과 인터페이스 (계층성)
2. 다형성, 사용편의성 (모듈화)
3. 캡슐화, 정보은닉
4. 자료 추상화 (모델링)
5. 동적 바인딩

 

자바에서 상속은 세가지로 구현할 수 있다.

  1. extends
    • 부모에서 선언 / 정의를 모두하며 자식은 메소드 / 변수를 그대로 사용할 수 있음
  2. implements (interface 구현)
    • 부모 객체는 선언만 하며 정의(내용)은 자식에서 반드시 오버라이딩 (재정의) 해서 사용해야함
  3. abstract
    • extends와 interface 혼합. 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();
  }
}

extends에서 짚고 넘어갈 점은 자바는 "다중상속"을 지원하지 않는다는 점이다.

 

extends를 사용하면 부모클래스가 두 개 이상 존재할 수 없다.

따라서 나온 것이 implements이다.

 

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의 가장 큰 특징은 이렇게 부모의 메소드를 반드시 오버라이딩(재정의)해야 한다.

 

간단 정리

  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의 내용을 다 사용해야 한다.

reference

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!