Java Inheritance


상속 (Inheritance)

상속은 객체지향 프로그래밍에서 중요한 개념으로, 기존 클래스(부모 클래스 또는 슈퍼 클래스)를 확장하여 새로운 클래스(자식 클래스 또는 서브 클래스)를 만드는 것을 말합니다. 이를 통해 코드의 재사용성을 높이고 구조를 계층화할 수 있습니다.

상속 개념 (Concept of Inheritance)

자식 클래스는 부모 클래스의 속성(필드)과 기능(메서드)을 상속받습니다. 이로 인해 자식 클래스는 부모 클래스의 모든 공개된 속성과 메서드를 사용할 수 있습니다.

상속 예제:

// 부모 클래스
class Animal {
    String name;

    void makeSound() {
        System.out.println("소리를 낸다.");
    }
}

// 자식 클래스
class Dog extends Animal {
    void displayInfo() {
        System.out.println("이름: " + name);
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.name = "멍멍이";
        myDog.displayInfo(); // 출력: 이름: 멍멍이
        myDog.makeSound(); // 출력: 소리를 낸다.
    }
}

위의 예제에서 Animal 클래스는 name 속성과 makeSound() 메서드를 정의하고 있습니다. Dog 클래스는 Animal 클래스를 상속받아 displayInfo() 메서드를 추가로 정의하였습니다. main 메서드에서 Dog 클래스의 객체를 생성하여 부모 클래스의 메서드와 자식 클래스의 메서드를 모두 호출할 수 있습니다.

메서드 오버라이딩 (Method Overriding)

메서드 오버라이딩은 자식 클래스에서 부모 클래스의 메서드를 재정의하는 것을 말합니다. 이를 통해 같은 메서드 이름으로 다른 동작을 정의할 수 있습니다.

메서드 오버라이딩 예제:

// 부모 클래스
class Animal {
    void makeSound() {
        System.out.println("소리를 낸다.");
    }
}

// 자식 클래스
class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.makeSound(); // 출력: 멍멍!
    }
}

위의 예제에서 Animal 클래스의 makeSound() 메서드를 Dog 클래스에서 오버라이딩하여 새로운 동작을 정의하였습니다. 이렇게 하면 Dog 클래스의 객체에서 makeSound()를 호출할 때 멍멍!이 출력됩니다.

다형성 (Polymorphism)

다형성은 객체지향 프로그래밍에서 여러 클래스가 같은 이름의 메서드를 가질 때, 호출하는 메서드의 구현이 어떤 객체에 의해 결정되는 성질을 말합니다. 다형성은 상속과 함께 사용되며, 자식 클래스의 객체가 부모 클래스의 타입으로 사용될 수 있음을 의미합니다.

다형성 예제:

// 부모 클래스
class Animal {
    void makeSound() {
        System.out.println("소리를 낸다.");
    }
}

// 자식 클래스
class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("멍멍!");
    }
}

// 다형성 예제
public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Dog(); // 다형성 적용
        myAnimal.makeSound(); // 출력: 멍멍!
    }
}

위의 예제에서 Animal 타입의 변수 myAnimalDog 클래스의 객체를 참조할 수 있습니다. 이렇게 하면 myAnimal.makeSound() 호출 시 실제 실행되는 메서드는 Dog 클래스에서 오버라이딩된 makeSound()가 됩니다.

상속, 메서드 오버라이딩, 다형성은 Java에서 객체지향 프로그래밍의 핵심 개념으로, 코드의 재사용성과 유지보수성을 높이는 데 중요한 역할을 합니다.


Leave a Reply

Your email address will not be published. Required fields are marked *