[Java] 6장 상속과 다형성

1. 상속 (Inheritance)

자바의 상속은 한 클래스가 다른 클래스의 속성과 메소드를 물려받는 기능으로 extends 키워드를 사용해 상속을 구현할 수 있습니다. 상속을 통해 코드를 재사용하고, 계층 구조를 생성할 수 있습니다. 상속의 특징과 장점은 다음과 같습니다.

  • 특징
    • 단일 상속: 자바는 클래스가 하나의 부모 클래스만 상속받을 수 있으며, 이를 통해 다이아몬드 문제를 피할 수 있음
    • 재사용성: 상위 클래스의 속성과 메소드를 하위 클래스가 재사용할 수 있음
    • 계층 구조: 클래스 간의 관계를 계층적으로 정의할 수 있어, 객체 간의 관계를 직관적으로 이해 
  • 장점
    • 코드의 재사용성: 이미 작성된 클래스의 기능을 재사용해 새로운 클래스를 쉽게 만들 수 있음
    • 유지보수 용이성: 코드의 수정이 용이하며, 상위 클래스에서 수정하면 모든 하위 클래스에 자동 적용
    • 확장성: 새로운 기능을 추가하거나 기존 기능을 수정하는 것이 상대적으로 간단

상속(Inheritance) 사용법

class Animal {

    void speak() {
        System.out.println("Anime is Speak");
    }
}

class Dog extends Animal {

    @Override
    void speak() {
        System.out.println("멍멍!");
    }
}

class Cat extends Animal {

    @Override
    void speak() {
        System.out.println("야용!");
    }
}

public class Main {

    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.speak(); // 출력: 멍멍!
        myCat.speak(); // 출력: 야옹!
    }
}

2. 다형성 (Polymorphism)

다형성은 동일한 메소드가 다양한 방식으로 동작할 수 있는 능력을 의미하며, 자바에서는 메서드 오버라이딩(overriding)과 메소드 오버로딩(overloading)을 통해 다형성을 구현합니다. 다형성의 특징으로는 다음과 같습니다.

  • 특징
    • 메소드 오버라이딩: 상속받은 클래스에서 슈퍼클래스의 메소드를 재정의
    • 메소드 오버로딩: 같은 이름의 메소드를 매개변수의 타입이나 개수에 따라 여러 개 정의
    • 동적 바인딩: 메소드 호출 시점에 어떤 메소드를 호출할지 경정되므로 유연한 코드 작성 가능
  • 장점
    • 유연성: 다양한 객체를 동일한 방식으로 처리할 수 있어, 코드의 간결함과 쉬운 유지보수
    • 인터페이스 호환성: 인터페이스를 통해 다형성을 더욱 극대화할 수 있어, 다양한 구현체를 사용할 수 있음
    • 코드의 가독성 향상: 객체의 타입에 관계없이 동일한 메소드를 호출할 수 있어, 코드의 가독성이 높아짐
interface Animal {

    void speak();
}

class Dog implements Animal {

    @Override
    public void speak() {
        System.out.println("멍멍!");
    }
}

class Cat implements Animal {

    @Override
    public void speak() {
        System.out.println("야용!");
    }
}

public class Main {

    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.speak(); // 출력: 멍멍!
        myCat.speak(); // 출력: 야용!
    }
}

 

 

GitHub - Koras02/java-bloging: https://thinky.tistory.com/category/Back-End/Java

https://thinky.tistory.com/category/Back-End/Java. Contribute to Koras02/java-bloging development by creating an account on GitHub.

github.com

 

LIST

'Back-End > Java' 카테고리의 다른 글

[Java] 8장 try-catch 문  (0) 2025.03.18
[Java] 7장 인터페이스  (0) 2025.03.08
[Java] 5장 클래스와 객체  (0) 2025.03.02
[Java] 4장 메서드 작성  (0) 2025.02.26
[Java] 3장 제어문  (0) 2025.02.25