"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Java의 추상 클래스 – 분석

Java의 추상 클래스 – 분석

2024-11-08에 게시됨
검색:427

Abstract Classes in Java – Breaking It Down

추상 클래스란 무엇입니까?

추상 클래스는 다른 클래스의 청사진과 같습니다. 추상 클래스에서 직접 객체를 만들 수는 없습니다. 대신, 이를 기반으로 세부 사항을 채울 수 있는 다른 클래스의 기초로 사용합니다.

추상 클래스를 사용하는 이유는 무엇입니까?

추상 클래스는 공유 기능이 있는 일반적인 개념을 정의하고 상황에 따라 달라질 수 있는 특정 세부 사항을 위한 공간을 남겨두고 싶을 때 유용합니다. 예를 들어, 먹거나 자는 것과 같은 공통적인 특징을 포함하는 '동물'이라는 일반적인 개념이 있을 수 있지만 동물마다 먹거나 자는 방식이 다를 수 있습니다.

추상 클래스 생성

Animal이라는 추상 클래스를 만드는 방법은 다음과 같습니다.

public abstract class Animal {
    abstract void makeSound();  // Abstract method, no body

    void sleep() {
        System.out.println("This animal sleeps.");
    }
}

이 예에서 makeSound()는 추상 메서드입니다. 즉, 아직 본문이 없습니다. 그러나 sleep() 메소드는 완전히 구현되었습니다.

추상 클래스 확장

이제 Animal 클래스를 확장하는 몇 가지 클래스를 만들어 보겠습니다.

public class Dog extends Animal {
    void makeSound() {
        System.out.println("The dog barks.");
    }
}

public class Cat extends Animal {
    void makeSound() {
        System.out.println("The cat meows.");
    }
}

Dog 및 Cat 클래스는 모두 자체 버전의 makeSound() 메서드를 제공해야 하지만 sleep() 메서드를 그대로 상속합니다.

추상 클래스와 인터페이스

  • 상속: 클래스는 하나의 추상 클래스만 확장할 수 있지만 여러 인터페이스를 구현할 수 있습니다.
  • 메서드 구현: 추상 클래스는 추상 메서드(본문 없음)와 완전히 구현된 메서드를 모두 가질 수 있습니다. 인터페이스(Java 8 이전)에는 추상 메소드만 있을 수 있습니다.
  • 생성자: 추상 클래스는 생성자를 가질 수 있지만 인터페이스는 가질 수 없습니다.

부분 구현

추상 클래스는 모든 하위 클래스에서 공유해야 하는 일부 메서드가 있을 때 유용하지만 일부 메서드를 해당 하위 클래스에서 정의하도록 강제하려는 경우도 있습니다.

public abstract class Bird extends Animal {
    void move() {
        System.out.println("The bird flies.");
    }
}

이제 Bird를 확장하는 모든 클래스는 Animal의 move() 메서드와 sleep() 메서드를 모두 상속하지만 여전히 makeSound()를 구현해야 합니다.

도전: 직접 시도해 보세요!

  1. 추상 메서드 startEngine()을 사용하여 Vehicle이라는 추상 클래스를 만듭니다.
  2. Vehicle을 확장하고 startEngine() 메서드를 구현하는 Car와 Motorcycle라는 두 개의 클래스를 만듭니다.
  3. stopEngine()과 같은 일반적인 메소드를 Vehicle에 추가하고 하위 클래스에서 어떻게 작동하는지 확인하세요.

결론

Java의 추상 클래스는 관련 클래스에 대한 공유 기반을 생성하는 동시에 해당 클래스가 특정 세부 사항을 정의할 공간을 남겨두는 방법을 제공합니다. 공유 기능과 유연성 사이의 균형을 유지하여 코드를 강력하고 재사용 가능하게 만듭니다.

릴리스 선언문 이 글은 https://dev.to/be11amer/abstract-classes-in-java-breaking-it-down-1k79?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3