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

Java의 추상 클래스 – 분석

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

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]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>
  • dpdm을 사용하여 Redux에서 순환 종속성 버그를 수정하는 방법
    dpdm을 사용하여 Redux에서 순환 종속성 버그를 수정하는 방법
    혼란의 고리 깨기: Redux 순환 의존성 여정 최근 Redux 코드베이스에서 우연히 발견한 버그로 인해 머리가 긁힐 정도였습니다. 테스트 스위트에서 말도 안 되는 오류가 발생했을 때 갑작스러운 혼란의 물결을 느낀 적이 있다면 그 느낌을 아실 것입니다....
    프로그램 작성 2024-11-08에 게시됨
  • 단일 MySQLi 문에서 여러 쿼리를 준비할 수 있나요?
    단일 MySQLi 문에서 여러 쿼리를 준비할 수 있나요?
    단일 MySQLi 문에서 여러 쿼리 준비단일 MySQLi 문에서 여러 쿼리를 준비하는 것은 불가능합니다. 각 mysqli_prepare() 호출은 단일 쿼리만 준비할 수 있습니다.여러 쿼리 실행을 위한 대체 접근 방식한 번에 여러 쿼리를 실행해야 하는 경우 다음을 생성...
    프로그램 작성 2024-11-08에 게시됨
  • Golang에서 지도를 안전하게 사용하기: 선언과 초기화의 차이점
    Golang에서 지도를 안전하게 사용하기: 선언과 초기화의 차이점
    소개 이번 주에 저는 golang용 API 래퍼 패키지 중 하나를 작업하고 있었는데, 그 패키지에서는 URL 인코딩 값이 포함된 게시물 요청 전송, 쿠키 설정 및 모든 재미있는 작업을 다루었습니다. 하지만 본문을 구성하는 동안 url.Value 유형을 ...
    프로그램 작성 2024-11-08에 게시됨
  • 다음 목표
    다음 목표
    저는 9.1/10이라는 인상적인 점수로 논문을 완성했는데, 정말 자랑스럽습니다. 내 논문을 출판된 저널 논문으로 전환하기 위한 REV-ECIT 2024 제출 마감일은 9월 30일입니다. 저는 현재 박사 학위 지도교수님의 지원을 받아 제 작업을 다듬고 있는데, 지도교수...
    프로그램 작성 2024-11-08에 게시됨
  • Better - AI 기반 코드 검토자 GitHub Action
    Better - AI 기반 코드 검토자 GitHub Action
    코드 검토는 표준을 유지하고 프로젝트에서 코드의 모범 사례를 강조하는 데 항상 중요했습니다. 이 게시물은 개발자가 코드를 어떻게 검토해야 하는지에 대한 게시물이 아니라 코드의 일부를 AI에 위임하는 것에 관한 것입니다. Michael Lynch가 자신의 게시물인 &qu...
    프로그램 작성 2024-11-08에 게시됨
  • Java 8을 사용하여 목록에서 단어 빈도를 효율적으로 계산하려면 어떻게 해야 합니까?
    Java 8을 사용하여 목록에서 단어 빈도를 효율적으로 계산하려면 어떻게 해야 합니까?
    Java 8을 사용하여 단어 빈도 계산웹 개발 및 데이터 분석에서는 단어 빈도를 이해하는 것이 중요합니다. 이를 달성하기 위해 Java 8을 사용하여 목록에서 단어의 빈도를 계산하는 방법을 살펴보겠습니다.Java 8 솔루션Java 8의 Stream API는 단어에 대한...
    프로그램 작성 2024-11-08에 게시됨
  • 캡슐화란 무엇이며 어떻게 사용하나요?
    캡슐화란 무엇이며 어떻게 사용하나요?
    캡슐화란 무엇입니까? Java의 캡슐화는 다른 사람이 사용할 수 있도록 하면서 무언가가 어떻게 작동하는지에 대한 세부 정보를 숨기는 것입니다. 데이터(변수 등)와 메서드(함수 등)를 클래스라는 하나의 단위로 그룹화합니다. 모든 사람이 데이터에 직접 액세스하도록 허용하는...
    프로그램 작성 2024-11-08에 게시됨
  • Java에서 이진 트리 반전
    Java에서 이진 트리 반전
    최근에 저는 알고리즘/데이터 구조 기술을 향상시키기 위해 LeetCode 연습을 몇 가지 연습하기 시작했습니다. 이 플랫폼은 여러 프로그래밍 언어로 다른 개발자 솔루션을 연습하고 배우고, 토론하고, 다른 사람들과 솔루션을 공유하고, 대기업에서 요청한 코드 과제를 연습할...
    프로그램 작성 2024-11-08에 게시됨
  • Python에서 숫자의 인수를 효율적으로 찾는 방법은 무엇입니까?
    Python에서 숫자의 인수를 효율적으로 찾는 방법은 무엇입니까?
    Python에서 효율적으로 숫자의 인수 찾기숫자의 인수를 결정하는 것은 다양한 영역에서 일반적인 작업이며 Python은 다양한 영역을 제공합니다. 이를 달성하는 효율적인 방법입니다.최적화된 접근 방식 중 하나는 목록과 함께 Python의 reduce 함수를 활용하는 것...
    프로그램 작성 2024-11-08에 게시됨
  • JavaScript 딜레마: 스크립트 삽입과 인라인 실행?
    JavaScript 딜레마: 스크립트 삽입과 인라인 실행?
    외부 스크립트 태그 내의 JavaScript: 소스 딜레마와 함께 외부 스크립트 태그를 활용하는 경우 구문의 한계를 이해하는 것이 중요합니다. 아래 예와 같이 이러한 태그 내에 JavaScript를 직접 삽입하려고 하면 예기치 않은 동작이 발생합니다.<script...
    프로그램 작성 2024-11-08에 게시됨
  • PHP가 아닌 속성 후크
    PHP가 아닌 속성 후크
    11월에는 우리가 사랑하는 PHP 버전 8.4를 출시할 예정이며, 이를 통해 커뮤니티에서 오랫동안 기다려온 새로운 기능인 속성 후크를 갖게 됩니다! C#, Swift 및 Kotlin과 같은 다른 언어에서 영감을 받은 이 새로운 기능은 매직 메소드 __set() 및 __...
    프로그램 작성 2024-11-08에 게시됨
  • 서버와 클라이언트를 차단하지 않고 서버에서 업로드된 파일의 현재 쓰기 크기를 실시간으로 읽고 에코하는 방법은 무엇입니까?
    서버와 클라이언트를 차단하지 않고 서버에서 업로드된 파일의 현재 쓰기 크기를 실시간으로 읽고 에코하는 방법은 무엇입니까?
    서버와 클라이언트를 차단하지 않고 서버 측에 작성 중인 업로드 파일의 크기를 실시간으로 읽고 인쇄하는 방법은 무엇입니까? 이 문제를 좀 더 자세히 살펴보겠습니다.파일 업로드 진행 상황을 실시간으로 가져오기 위해 가져오기를 통해 Blob, File, TypedArray ...
    프로그램 작성 2024-11-08에 게시됨
  • Python에서 윤년을 결정하는 방법: 종합 안내서
    Python에서 윤년을 결정하는 방법: 종합 안내서
    Python으로 윤년 계산연도가 윤년인지 확인하려면 프로그래밍 방식으로 평가할 수 있는 특정 기준이 필요합니다. 윤년은 4로 나누어 떨어지지만 100으로 나누어 떨어지지만 400으로 나누어지지 않는 연도는 제외됩니다.이 문제에 대한 한 가지 잠재적인 접근 방식은 윤년을...
    프로그램 작성 2024-11-08에 게시됨
  • 정규식을 사용하여 PHP에서 문자로 묶인 하위 문자열을 추출하는 방법은 무엇입니까?
    정규식을 사용하여 PHP에서 문자로 묶인 하위 문자열을 추출하는 방법은 무엇입니까?
    PHP에서 문자로 묶인 하위 문자열 추출문자열에서 특정 문자로 묶인 구문을 추출하는 것은 일반적인 프로그래밍 작업입니다. PHP는 정규 표현식을 통해 이에 대한 편리한 솔루션을 제공합니다.다음 문자열을 고려하십시오.$String = "[modid=256]&qu...
    프로그램 작성 2024-11-08에 게시됨
  • YAML에서 JSON으로 변환: 종합 가이드
    YAML에서 JSON으로 변환: 종합 가이드
    YAML과 JSON은 데이터 직렬화에 널리 사용되는 두 가지 형식으로, 각각 고유한 장점을 가지고 있습니다. 이들 간의 변환 방법을 이해하는 것은 다양한 플랫폼과 시스템에서 작업하는 개발자에게 유용합니다. 이 가이드에서는 YAML과 JSON의 주요 차이점, 둘 사이를...
    프로그램 작성 2024-11-08에 게시됨

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

Copyright© 2022 湘ICP备2022001581号-3