Java: 추상 클래스가 있는 이유는 무엇입니까?

2520 단어 javaabstract
저는 최근에 Java를 배웠고 저에게 새로운 개념은 추상 클래스에 대한 아이디어입니다. 개념은 이미 일종의 "추상"(말장난 의도)이지만 일반 클래스나 인터페이스를 사용할 수 있는데도 추상 클래스를 사용하는 이유가 이해되지 않습니다.

OOP(객체 지향 프로그래밍)의 추상화



검토하기 위해 OOP의 추상화 개념은 개발자가 기능(항목 사용 방법)에 집중할 수 있도록 구현 세부 정보를 숨기고 있습니다. 예를 들어, TV 리모컨은 사용하기 위해 리모컨이 어떻게 작동하는지 알 필요가 없다는 점에서 추상화입니다. 어떤 버튼을 눌러야 하는지만 알면 됩니다.

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



Java에서는 추상 클래스를 만드는 두 가지 방법이 있습니다.

추상 키워드 사용: abstract class Car { // Code… }
또는

인터페이스 키워드 사용: interface Animal { // Code… }
여기서는 추상 클래스에 초점을 맞추고 있습니다. 그러나 추상 클래스와 인터페이스의 차이점 중 하나는 추상 클래스에 있는 메서드의 0-100%가 추상일 수 있는 반면 인터페이스의 메서드는 100%가 추상이라는 점입니다(일부 예외는 있음).

추상 클래스는 다음과 같은 차이점이 있는 Java의 일반 클래스와 유사합니다.
  • abstract 키워드를 사용하여 선언해야 합니다.
  • 추상 및 비추상 메서드를 가질 수 있습니다.
  • 인스턴스화할 수 없습니다(추상 클래스에서 직접 개체를 만들 수 없음).
  • 사용하려면 추상 클래스를 확장(상속)해야 합니다.

  • 추상 방법이란 무엇입니까?



    추상 메서드는 추상 키워드를 사용하여 선언해야 합니다.abstract void drive();
    메서드에 코드를 포함할 수 없습니다. 위의 예와 같이 메서드 서명만 있으면 됩니다.

    추상 클래스를 상속하는 모든 일반 클래스는 모든 추상 메서드를 구현해야 합니다. 즉, 추상적인 방법을 대체하려면 고유한 방법을 제공해야 합니다.

    추상 클래스는 무엇에 사용됩니까?



    그래서 내 원래 질문으로 돌아가서 – 왜 우리가 그것들을 사용합니까? 추상 클래스는 Java에서 매우 유용합니다. 공통 기능이 있고 일부 사용자 지정 동작도 구현해야 할 때 사용됩니다. 예를 들어 다른 인터넷 사이트에서 데이터를 다운로드해야 한다고 가정해 보겠습니다. 개별 자식 클래스가 다운로드되는 데이터를 처리하는 고유한 방식을 구현하는 동안 추상 부모 클래스를 사용하여 데이터의 통신 및 다운로드를 처리할 수 있습니다.

    추상화의 OOP 개념으로 돌아가서 이것은 의미가 있습니다. 우리는 추상 부모 클래스가 인터넷을 통한 통신의 세부 사항을 처리하도록 하고 다운로드되는 특정 데이터를 처리하는 데 집중합니다. 이는 우리가 방문하는 각 사이트마다 다를 수 있습니다.

    예를 들면 다음과 같습니다.

    abstract class internetLink {
    // methods to handle downloading data from the internet
    
    abstract void handleData(); // method to handle the data to be implemented by our classes
    }
    
    class newsDownload extends internetLink {
    void handleData() {
    // code to handle the downloaded news data
    }
    }
    
    class friendsDownload extends internetLink {
    void handleData() {
    // code to handle the downloaded friends data
    }
    }
    
    class chatDownload extends internetLink {
    void handleData() {
    // code to handle the downloaded chat data
    }
    }
    

    따라서 각 다운로드 클래스는 서로 다른 데이터를 처리합니다. 다운로드 클래스가 데이터를 처리하는 메서드를 구현하는 동안 실제 다운로드를 처리하기 위해 InternetLink 클래스를 작성할 수 있습니다. 이 경우 데이터로 작업을 수행하는 메서드만 작성하면 됩니다. 실제 다운로드에 대해 걱정할 필요가 없습니다. InternetLink 클래스가 이를 처리합니다!

    이를 템플릿 메서드 디자인 패턴이라고 하며 객체 지향 프로그래밍 언어에서 널리 사용되는 디자인 패턴입니다.

    이 개념은 이제 나에게 더 의미가 있으며 이것이 당신에게도 더 의미가 있기를 바랍니다!

    좋은 웹페이지 즐겨찾기