상속

Yullc·2025년 3월 12일
post-thumbnail

상속

상속이란 자식 클래스가 부모의 클래스를 물려받아 부모 클래스가 가지고 있는 메서드들을 가져와서 쓰는거야! 예를 들어 오리클래스에 '날다'라는 메서드가 있고 흰오리 클래스에 똑같이 '날다' 라는 메서드가 있어! 그럼 똑같은게 두개니까 중복되잖아? 그럼 뭔가 비효율적이잖아? 그러니까 상속이라는 개념을 사용해서 비효율적인걸 줄이는 느낌이지~ 뭔 말인지 알지??

예시 코드야

class Main {
    public static void main(String[] args) {
        오리 a오리 = new 오리();
        a오리.날다();

        흰오리 a흰오리 = new 흰오리();
        a흰오리.날다();
     

       청둥오리 a청둥오리 = new 청둥오리();
        a청둥오리.날다();

        고무오리 a고무오리 = new 고무오리();
        a고무오리.날다();


        고무2오리 a고무2오리 = new 고무2오리();
        a고무2오리.날다();

    }
}

class 오리 {
    void 날다() {//1
        System.out.println("날다");
    }
}
class 흰오리 extends 오리 {//2
//    void 날다(){
//        System.out.println("흰오리가 난다");
//    }
}

class 청둥오리 extends 오리 {
//    void 날다() {
//        System.out.println("오리가 날개로 날아갑니다.");
//    }
}
class 고무오리 extends 오리 {
    void 날다(){ // 오버라이딩 - 부모한테 물려받을거를 내가 재정의 해서 쓸거에요
        System.out.println("고무오리는 못날아요");
    }
}

class 고무2오리 extends 고무오리 {
//    void 날다(){
//        System.out.println("고무오리는 못날아요");
//    }
}

설명을 하자면,

  • a오리,a흰오리,a청둥오리,a고무오리,a고무2오리 라는 객체들을 만들었어! 그러면 앞전에 했던거처럼 일단 각각의 클래스들을 만들어야겠지?
  • 그러고나서 오리들한테 '날다'라는 메서드가 필요해 그러면 클래스마다 void 날다()를 해주면 되잖아?
  • 물론 그럼 되겠지만 우리는 더 편하기 위해서 extends 오리를 사용해 부모클래스를 '오리'로 잡고 나머지는 자식으로 잡을거야
  • 이게 뭔말이냐?! class 흰오리 extends 오리 이렇게 하면 흰오리라는 클래스는 오리라는 클래스에 자식입니다.! 라는 뜻이야
  • 그러므로 void날다() 메서드를 부모인 오리 클래스에만 작성하면 되는거야
  • 중간에 잘보면 고무오리에는 메서드가 있는걸 볼 수 있어! 고무오리는 날지를 못한대... 그럼 나머지 오리들은 날고 있는데 고무오리는 못날잖아? 날고있는 척을 할 수도 없고 그러므로 고무오리에 void날다 메서드를 재정의 해주는거야! 그래서 우리는 이걸 오버라이딩이라고 해!!!
  • 그럼 또 고무2오리도 있잖아? 그러면 최상위 오리 클래스가 아니라 고무오리를 상속받으면 고무2오리도 못날게 되는거다~

그래서 상속을 사용하면 중복을 줄이고 수정도 편하게 할 수 있고 코드도 간략해지고! 대박이지?? 이제 좀 효율적으로 코드를 짜자고
아니요.. 아직 저희 초심자한텐 뭐가뭔지..1도 몰라요..

profile
아자아자자

0개의 댓글