상속과 메소드 오버라이딩 - [Java OOP #4]

계승



"상속"이라는 단어는 조상으로부터 무언가를 물려받는 것으로 정의됩니다. 유사하게 Java에서 이러한 상속 개념은 자식 클래스(하위 클래스라고 함)가 부모 클래스(슈퍼 클래스라고 함)로부터 속성과 메서드를 상속하는 경우에 적용될 수 있습니다.

상속은 비슷한 특성을 가진 개체를 만들려고 할 때 유용하지만 각 개체에는 고유한 추가 기능이 있습니다. 예를 들어, Bicycle 수퍼 클래스를 가질 수 있지만 특정 유형의 자전거를 정의하기 위해 MountainBicycleRoadBicycle와 같은 여러 하위 클래스가 필요합니다.

아래 예에서는 Cat 키워드를 사용하여 Animal 수퍼 클래스에서 extends 하위 클래스를 생성합니다.

class Animal {
    public String name;
    public int age;

    Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() {
        System.out.println("Nom nom.");
    }

    public String toString() {
        return ("Name: " + name + "Age: " + age);
    }
}

class Cat extends Animal {
    public String colour;

    Cat(String name, int age, String colour) {
        // invoking superclass' constructor
        super(name, age);
        this.colour = colour;
    }

    // Overriding toString() method to print more info
    @Override
    public String toString() {
        return ("Name: " + name + "Age: " + age + "Colour: " + colour);
    }
}

public class Test {
    public static void main(String args[]) {
        Cat cat1 = new Cat("Oatmew", 3, "orange");
        System.out.println(cat1.toString());
        // calling a method from superclass
        cat1.eat();
    }
}



참고 사항:

Animal 클래스의
  • nameage는 비공개인 경우 하위 클래스에서 액세스할 수 없기 때문에 공개로 설정되었습니다.
  • 개체cat1eat() 메서드에 액세스할 수 있습니다. Cat 클래스는 Animal 클래스의 메서드를 상속받기 때문입니다.
  • super 키워드는 하위 클래스에서 수퍼 클래스 구성원에 액세스하는 데 사용됩니다. 속성, 생성자 및 메서드에 액세스하는 데 사용할 수 있습니다.
  • @Override는 하위 클래스가 상위 클래스를 덮어쓰고 있음을 컴파일러에 알리는 데 사용되는 주석입니다. 메서드가 실제로 아무 것도 재정의하지 않은 경우 컴파일러에서 경고를 추출하고 코드 가독성도 향상시키기 때문에 유용합니다. 필수는 아니지만 일반적으로 사용하는 것이 좋습니다.



  • 상속 유형



    클래스를 기반으로 Java에는 세 가지 유형의 상속이 있습니다.
  • 싱글

  • 단일 수준 상속에서 슈퍼클래스에는 하나의 서브클래스만 있습니다.


  • 다단계

  • 다단계 상속에서 슈퍼클래스는 서브클래스를 가질 수 있고 서브클래스는 자체 서브클래스를 가질 수 있습니다. 그러나 각 하위 클래스는 직계 상위 클래스에만 액세스할 수 있습니다.


  • 계층적

  • 계층적 상속에서 단일 클래스는 여러 하위 클래스의 상위 클래스 역할을 합니다.




    메서드 재정의



    메서드 재정의는 하위 클래스에 메서드가 같지만 구현이 부모 클래스와 다른 경우에 수행됩니다. 메서드 재정의 사용 규칙은 다음과 같습니다.
  • 상속된 메서드만 재정의할 수 있습니다.
  • 재정의 메서드는 재정의 메서드와 이름, 매개 변수 및 반환 유형이 같아야 합니다.
  • 최종, 정적 또는 개인 메서드는 재정의할 수 없습니다.
  • 좋은 웹페이지 즐겨찾기