본문 바로가기

IT/Programming Language

[Java] 상속 (Inheritance) 과 인터페이스 (Interface)

반응형

상속 (Inheritance)

Java에서는 클래스 간 상속의 개념이 존재
상속이란 말 그대로 부모 자식 간의 상속을 의미
부모 클래스를 상속 받는다는 말의 뜻은, 부모 클래스의 클래스 변수, 메서드를 재사용, 확장한다는 의미

추상 클래스, 인터페이스 내용 참고 : [Java] 추상클래스와 인터페이스

 

클래스 상속

  • extends 키워드 사용
  • 일반 클래스 또는 추상 클래스를 상속 받을 수 있음
  • 다중 상속 받을 수 없음
  • 부모의 메소드 그대로 사용 가능
  • 부모의 메소드를 재정의(오버라이딩) 가능
    • 생성자 규칙
      • super(...) 메소드를 사용하여 부모 생성자 호출
      • 자식 클래스의 생성자에서는 반드시 부모 생성자(super)를 첫째줄에 선언 해주어야 함
// 부모 클래스
class Animal{
    protected String name;

    public Animal(String name){
        this.name = name;
    }

    public void move(int x){
        System.out.println(x + "만큼 앞으로 움직인다.");
    }

    public void eat(String food){
        System.out.println(food + "를 먹는다.");
    }
}

// 자식 클래스
class Cat extends Animal{

    public Cat(String name){
        super(name);
    }

    @Override
    public void move(int x){
        System.out.println(x + "만큼 뒤로 움직인다.");
    }
}

public class Main {
    public static void main(String[] args){
        Cat cat = new Cat("mycat");
        cat.move(5);
        cat.eat("fish");
    }
}

 

 

인터페이스 상속

  • 클래스가 인터페이스를 상속 받을 때는 implements 키워드 사용
  • 다중 상속 가능 (인터페이스 여러개 붙일 수 있음)
  • 상속받은 인터페이스의 추상화 메소드를 모두 오버라이딩해서 구현해야 함
interface Swimmable {
    void swim();
}

class A implements Swimmable {

    @Override
    public void swim() {
        System.out.println("A can backstroke");
    }
}

class B implements Swimmable {

    @Override
    public void swim() {
        System.out.println("B can butterfly");
    }
}

public class Main {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        a.swim(); // A can backstroke
        b.swim(); // B can butterfly
    }
}

 

인터페이스가 다른 인터페이스를 상속 받을 수 있는데, 이경우는 extends 키워드 사용

반응형