[TIL]JAVA-抽象クラス


💡Day 15抽象クラス


この文章は南宮星のjava定式3/eをもとに学習内容を整理した文章です.
クリーンアップソース:https://github.com/qudalsrnt3x/javaStandard

抽象クラスとは?


クラスを設計図にたとえると、抽象クラスは未完成の設計図にたとえることができる.共通部分のみ(宣言部分)を作成し、継承によって各設計図を完成させることができます.
実現の目的は多形性を実現することである.
abstract class 클래스이름 {
   ...
}

特長

  • 抽象クラスはインスタンスを作成することができず、継承によってのみ完了できます.
  • 抽象クラスには作成者もいれば、メンバー変数やメソッドもあります.
  • 抽象メソッドを含まないクラスには、抽象クラスとしてキーワード「abstract」を追加することもできます.
  • クラスインスタンスの作成は許可されていません

    ▼▼▼抽象的な方法(抽象的な方法)


    抽象的な方法は,方法の宣言簿のみを書き,実施簿は書かない.

    未完了の理由

  • メソッドの内容は継承されたレベルによって異なるためです.
  • /*주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명한다.*/
    abstract 리턴타입 메서드이름();

    ▼▼▼抽象クラスの作成

    abstract class 클래스이름 {
       // 멤버변수
       // 생성자
       // 메서드
       // 추상메서드
    }
    abstract class Player {
        boolean pause;  // 일시정지 상태를 저장하기 위한 변수
        int currentPos; // 현재 Play되고 있는 위치를 저장하기 위한 변수
    
        Player() {  // 추상 클래스 생성자
            pause = false;
            currentPos = 0;
        }
        /** 지정된 위치(pos)에서 재생을 시작하는 기능이 수행하도록 작성되어야 한다. */
        abstract void play(int pos); // 추상메서드
        /** 재생을 즉시 멈추는 기능을 수행하도록 작성되어야 한다. */
        abstract void stop();
    
        void play(){
            play(currentPos);   // 추상메서드 사용가능
        }
    
        void pause() {
            if (pause) {    // pause가 true 일 때(정지상태)에서 pause가 호출되면,
                pause = false;  // pause의 상태를 false로 바꾸고
                play(currentPos);   // 현재의 위치에서 play 한다.
            } else {    // pause가 false일 때 (play상태)에서 pause가 호출되면,
                pause = true; // pause의 상태를 true로 바꾸고
                stop(); // play를 멈춘다.
            }
    
        }
    }
    
    class CDplayer extends Player {
        void play(int currentPos) {
            //.. 조상의 추상메서드를 반드시 구현
        }
    
        void stop() {
            //.. 조상의 추상메서드를 반드시 구현
        }
    
        // CDPlayer클래스에 추가로 정의된 멤버
        int currntTrack;
    
        void nextTrack() {
            currntTrack++;
            // ...
        }
    
        void preTrack() {
            if (currntTrack > 1) {
                currntTrack--;
                // ...
            }
        }
    
    }
    abstractを抽象メソッドとして宣言するのは、サブクラスが作成時に抽象メソッドを実装するように強制するためです.

    なぜ抽象クラスを使用するのですか?


    目的は
  • 共通のメンバー変数と方法を統一することである.
  • 同じ大きさのテレビでも機能によっては様々な型番がありますが、実際には90%程度が同じ設計図になっている可能性があります.異なるテレビの設計図を単独で描くよりも、共通部分だけを描く未完成の設計図を作成し、これらの未完成の設計図を利用してそれぞれの設計図を完成させるほうが効率的です.
  • 抽象クラスを使用して、エンティティクラスを特定します.
  • 抽象クラスを用いて作業すれば,規格に適合した実装が可能である.多形性を実行できる.