상속 - implements

김민영·2023년 1월 22일
0

Java

목록 보기
9/14
  • imterface를 상속받는 방법

implements

  • 인터페이스 구현
  • 자바는 다중상속을 지원하지 않는 대신 인터페이스(implement)가 있음.
  • 설계목적
  • 자식 메소드는 부모 메소드(interface에 있는)를 반드시 오버라이딩(재정의) 해야함.

예제

class Animals{
    String name;

    public void setName(String name) {
        this.name = name;
    }
}
class Tiger extends Animals implements Predater{
    public String getName() {
        return "tiger";
    }
}
class Lion extends  Animals implements Predater{
    public String getName() {
        return "lion";
    }
}
class Zookeeper {
    void feed(Predater predater) {
        System.out.println("feed apple to " + predater.getName());
    }

interface Predater {
    String getName();
}

public class test {

    public static void main(String[] args){

        Zookeeper zookeeper = new Zookeeper();
        Tiger tiger = new Tiger();
        Lion lion = new Lion();
        zookeeper.feed(tiger);
        zookeeper.feed(lion);
    }
}
  • interface인 Predater를 상속받는 클래스는 getName()이라는 메소드가 있어야 한다.
  • interface를 상속받는 Tiger, Lion은 각각 getName()가 멤버 메소드로 선언되어있다.
  • Zookeeper 클래스의 feed 메소드는 Predater 자료형을 받아서, Predater.getName을 실행한다.
  • interface로 Tiger, Lion의 공통된 메소드인 getName을 관리한다.
    • interface Predater를 상속받는 클래스는 getName 메소드가 있어야 함을 강제한다. -> class의 extends 상속과 가장 큰 차이

디폴트 메소드 Default Method

  • interface 내부에서 default로 메소드를 선언하면, interface를 상속받는 클래스는 해당 메소드를 구현하지 않아도 사용 가능하다.

interface

interface Predater {
    String getName();

    default void printName() {
        System.out.println("my name is " + getName());
    }
}

메인 클래스

public class test {

    public static void main(String[] args){

        Zookeeper zookeeper = new Zookeeper();
        Tiger tiger = new Tiger();

        tiger.printName(); // my name is tiger
    }
}

스태틱 메소드 Static Method

  • interface 내부에서 static로 메소드를 선언하면, interface를 상속받는 클래스 내부에서 interface이름.method이름 형식으로 해당 메소드를 사용할 수 있다.

interface

interface Predater {

    int LEG_COUNT  = 4;
    
    static int speed(){
        return LEG_COUNT  * 30;
    }
}
  • 인터페이스 내부에서 지정한 상수는 public static final 이 기본으로 적용되고, 다른 형태의 상수로는 정의되지 않는다.

자식 클래스

class Lion extends  Animals implements Predater{

    public String getName() {
        System.out.println(Predater.speed());
        return "lion";
    }
}

메인 클래스

public class test {

    public static void main(String[] args){

        Zookeeper zookeeper = new Zookeeper();
        Lion lion = new Lion();
        zookeeper.feed(lion);
        // 120
        // feed apple to lion
    }
}
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글