[Java] 상속

     

    상속

    일상속에서의 상속이란, 부모의 것을 물려받는다라는 의미를 지녔습니다.

     

    그러면 JAVA 프로그래밍 속에서의 상속이란 무엇일까요?

     

    사진처럼 고양이와 강아지가 있습니다.

    두 마리의 동물은 서로 다른 개성으로 가진 동물로 유명합니다.

     

    그러나 이 둘의 공통점이 존재합니다.

    그것은 이 두 마리는 동물이라는 점 입니다.

     

    그럼 저희는 이를 동물Class로 생성하게 됩니다.

    class 동물 {
    
     String name;
     
      public void print() {
      	System.out.println("울음 소리");
      }
    
    }

    그런데, 동물 Class는 고양이와 강아지라는 것을 정의할 수는 있으나 이를 강아지class와 고양이class라고 정의하기는 어렵습니다. 왜냐하면, 어디까지나 동물class를 빌려 쓴 고양이와 강아지이기 때문입니다.

     

    그러면 상속은 무엇일까?

    //강아지 class 생성, 동물 class 상속
    public 강아지 extends 동물 {
    
    }
    
    //고양이 class 생성, 동물class 상속
    public 고양이 extends 동물 {
    
    
    }

    class 강아지와 고양이가 만들어졌습니다.

     

    이번에는 위의 설명과는 반대로 고양이와 강아지 class라고 할 수 있습니다.

    그런데 여기에는 아무런 필드값이 존재하지 않습니다.

     

    하지만, 동물class를 상속 받고 있기 때문에 아무것도 없지만  고양이 class와 강아지 class는 동물class의 필드와 메소드를 사용할 수 있습니다.

     

     

    package campus.ch11;
    
    class Animal {
        public void print() {
            System.out.println("This is an animal");
        }
    }
    
    class Dog extends Animal {
        public void cry() {
            System.out.println("This is a dog");
        }
    }
    
    class Cat extends Animal {
        public void cry() {
            System.out.println("This is a cat");
        }
    }
    
    class MainClass02 {
        public static void main(String[] args) {
            Dog myDog = new Dog();
            Cat myCat = new Cat();
            
            myDog.print();
            myDog.cry();
            myCat.print();
            myCat.cry();
        }
    }
    
    [ 출력 결과 ]
    This is an animal
    This is a dog
    This is an animal
    This is a cat

    해당 코드는 Cat class와 Dog class에는 print() 함수가 없는 것을 확인 할 수 있습니다.

    그러나 dog class와 cat class에는 상속을 무난히 사용할 수 있는 것을 확인 할 수 있습니다.

     

    위 행위가 가능한 이유는 Animal class를 상속하고 있기 때문에 가능한 모습입니다.

    Ansimal class를 상속한 Dog class와 Cat class는 Animal의 print()를 그대로 사용할 수 있습니다.

     

    이제 우리는 이를 Animal class를 부모 class, 

     

     

     

    @Override

    위의 설명의 연장입니다.

     

    그러면,  만약 상속 받은 class는 부모 class의 method를 변경할 수 없을까?

     

    ✔️ 이를 가능하게 만든 것이 Override 입니다.

    이를 가능하게 만든 것이 Override 입니다.

     

     

    //Animal class 부모
    class Animal {
        public void print() {
            System.out.println("This is an animal");
        }
    }
    
    //Cat class 자식
    class Cat extends Animal {
        public void cry() {
            System.out.println("This is a cat");
        }
    
        @Override
        public void print() {
            System.out.println("This is Cat");
        }
    }
    
    //Main Class
    class MainClass02 {
        public static void main(String[] args) {
            Cat myCat = new Cat();
            
            myCat.print();
            myCat.cry();
        }
    }

     

     

    위의 message와 다르게, print() 코드의 호출 부분이 This is cat인 것을 확인할 수 있습니다.

    이를 가능하게 된 것이 부모의 print() 부분을 상속 받았지만, 자식이 부모에게 물려받은 method를 변경했기 때문에 가능한 일 입니다.

     

    이렇게 부모class의 method를 자식class에서 method를 변경해서 사용하는 것을 Override라고 정의를 짓습니다.

     

     

     

    상속의 장점

    1. 코드 재사용

    ✔️ 이미 작성된 클래스의 기능을 확장하여 새로운 클래스를 쉽게 만들 수 있습니다.

     

    2. 유지보수의 용이성

    ✔️ 공통 기능을 부모 클래스에 두면, 수정이 필요할 때 한 곳만 수정하면 자식 클래스에도 반영이 됩니다.

     

    3. 다형성 구현

    ✔️ 부모 클래스 타입의 참조 변수로 자식 클래스의 객체를 참조하게 하여, 다양한 타입의 객체를 동일한 방식으로 처리할 수 있게 됩니다.

    반응형

    'Language > JAVA' 카테고리의 다른 글

    [JAVA] 디자인패턴 - 싱글턴  (0) 2024.09.02
    [Java] 중첩 클레스 알아보기  (1) 2024.07.03
    [Java] Java 설치하기  (0) 2024.04.29
    [Java] 문자열 관리하기  (1) 2023.11.23
    [Java] 데이터 타입  (1) 2023.11.23

    댓글

    Designed by JB FACTORY