JAVA学習8日目 ~オブジェクト指向の応用実践例~【コーチ・選手向けの一日の段取り】

プログラミングターゲット

次のように、それぞれ卓球とバスケットボールのコーチと生徒の動作を実行します。

		乒乓球教练|乒乓球学生|篮球教练|篮球学生
工作内容|教学	 |练乒乓球 | 教学	|练篮球
餐饮		|教练餐  |学生餐   |教练餐   |学生餐
额外内容|学英语 |学英语  |无         |无
个人属性(姓名,年龄)

一連の考え

インターフェイス: 英語を話す
親: 人間の
コーチ: 人間の継承
学生: 人間の
継承 卓球コーチ: コーチ + インターフェイスの継承
卓球の生徒: 生徒 +
インターフェイスの継承 バスケットボールのコーチ: コーチの継承
バスケットボールの生徒: 生徒の継承

最終出力: テストクラス

実装手順

1. インターフェイス、引数なしの抽象メソッドを定義 - 英語を話す

インターフェースはアクションを抽象化したものです

インターフェースコード:

package person;

public interface speakeng {
    
    
    void speakeng();
}

2. ヒューマンコード: 人の抽象クラスを作成する

抽象クラスはプロパティを抽象化したものです

2.1 一般属性。2 つの一般パラメータに名前と年齢を設定します。

データのセキュリティを確保するために、メソッドをパラメータでカプセル化するには、プライベートを使用します。パラメータへの直接アクセスは、クラス内でのみ実行できます。他のクラスで呼び出す場合は、
プライベートが配置されているクラスで get set メソッドを使用する必要があります。

2.2 クラスと同じ名前のパラメータなしメソッドとパラメータ付きメソッドを構築してオブジェクトの初期化を完了する

(構築メソッドは特別なメソッドです。クラスと同じ名前のメソッドで、戻り値の型はありません。オブジェクトの作成は構築メソッドを通じて行われ、その機能は主にオブジェクトの初期化を完了することです。物体。)

パラメータ化されたメソッドでは、これを使用してクラス内のパラメータ名と年齢にアクセスします。

構築メソッド内の this は、次のことを指します。 this が配置される構築メソッドの変数

2.3 set メソッドと get メソッドを作成して、他のクラスがプライベートの変更された name パラメータと age パラメータにアクセスできるようにする
2.4 Eat の抽象メソッドを作成する (抽象変更)

抽象メソッド:
抽象メソッドとインスタンス メソッドの最大の違いは、抽象メソッドは通常のサブクラスによって書き直され、実装される必要があること
です。抽象メソッドは、親クラスが実装する必要があると考える関数にすることができます。
抽象クラスは、親クラスの抽象メソッドを書き換えずに抽象クラスを作成する 抽象クラスを継承する通常のクラスは、親クラスの抽象メソッドを書き換える必要があり、インターフェイスの実装についても同様です 抽象メソッドは抽象で修飾され、メソッド本体はありません

一般的な方法
プログラム内で特定の関数を繰り返し使用する必要がある場合、その関数をメソッドに記述して呼び出すことで、コードの冗長性を減らすことができます。
メソッド名はカスタマイズできますが、戻り値を変更する必要があります。メソッドに戻り値がない場合は、void で変更する必要があります。通常、メソッドは特定の機能を実現できますが、まったく機能しないか、無意味である場合もあります。

package person;

public abstract class person {
    
    
    private String name;
    private int age;

    public person(){
    
    
    }

    public person(String name, int age){
    
    
        this.name=name;
        this.age=age;
    }
    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }
    public abstract void eat();
}

3. コーチング クラス - コーチングの抽象クラスを作成し、ヒューマン
3.1 を継承するコーチング クラス (ヒューマンのサブクラス) をパラメータなしメソッドとパラメータ付きメソッドで構築し、super を使用して親クラスで実行を繰り返します。

サブクラスの構築メソッドは親クラスの構築メソッドを呼び出しますが、重要な点は、サブクラスの構築メソッドは必ず親クラスの構築メソッドを呼び出す必要があるということです。
サブクラス構築メソッドは、親クラスの引数なし構築メソッド (親クラスに構築メソッドがない場合を含みます。システムのデフォルトは引数なし構築メソッド) を呼び出すか、親クラスのパラメータ構築メソッドを呼び出します。

super は、親クラスの対応するコンストラクターでステートメントを実行することと同等です。

サブクラスの構築メソッドが親クラスの引数なしの構築メソッドを呼び出す場合、デフォルトでは書かれないのが一般的ですが、書きたい場合はsuper()で構築メソッドの最初の文に記述します。
サブクラス構築メソッドがパラメータを指定して親クラス構築メソッドを呼び出す場合、サブクラス構築メソッドは super (パラメータ) を使用して親クラス構築メソッドを呼び出す必要があり、これを構築メソッドの最初の文に配置する必要があります。

3.2 Teat クラス内で独自の Teach の抽象メソッドを作成する
3.3 人間から継承した Eat の抽象メソッドを書き直す (抽象変更、メソッド本体なし) (後続のインスタンス化された Coach クラスで、ここに書かないことも選択できます) ) のオーバーライド。これは一般的なメソッド クラスであり、テスト中に書き換えることなく直接呼び出すことができます。

package person;

public abstract class teach extends person{
    
    

    public teach(){
    
    }
    public teach(String name, int age){
    
    
        super(name,age);
    }
    public abstract void teach();
    @Override
    public void eat() {
    
    
            System.out.println("教练吃教练餐");
    }
}


4. 生徒のクラス コード:(考え方は教師のクラスと同じです)

package person;

public abstract class student extends person {
    
    
    public student() {
    
    }

    public student(String name, int age){
    
    
        super(name,age);
    }
    public abstract void student();

    @Override
    public void eat() {
    
    
        System.out.println("学生吃学生餐");
    }
}

5. 卓球学生コード:(学生クラスを継承し、英語学習用のインターフェースを追加) 5.1
卓球学生クラスの構築方法
5.2 学生クラスの学生抽象メソッドを書き換える
5.3 食べるクラスの抽象メソッド
5.4 speeteng のインターフェース内容を書き換える

package person;

public class pingpangstudent extends student implements speakeng{
    
    
    public pingpangstudent() {
    
    
    }

    public pingpangstudent(String name, int age) {
    
    
        super(name, age);
    }

    @Override
    public void student() {
    
    
        System.out.println("乒乓球学生学习乒乓球");
    }
/*
    @Override
    public void eat() {
        super.eat();
    }
 */
    @Override
    public void speakeng() {
    
    
        System.out.println("乒乓球员学英语");
    }

}


6. 卓球コーチコード:(卓球生徒と同じ)

package person;

public class pingpangteach extends teach implements speakeng{
    
    
    public pingpangteach() {
    
    
    }

    public pingpangteach(String name, int age) {
    
    
        super(name, age);
    }

    @Override
    public void eat() {
    
    
        super.eat();
    }

    @Override
    public void teach() {
    
    
        System.out.println("乒乓球教练教乒乓球");
    }

    @Override
    public void speakeng() {
    
    
        System.out.println("说英语");
    }

}

7. バスケットボールの学生向けのコード: (卓球の学生と同じ、インターフェースを追加する必要はありません)

package person;

public class basektballstudent extends student{
    
    
    public basektballstudent() {
    
    
    }

    public basektballstudent(String name, int age) {
    
    
        super(name, age);
    }

    @Override
    public void student() {
    
    
        System.out.println("篮球运动员学篮球");
    }

}

8. バスケットボールコーチコード:(バスケットボールの生徒と同じ)

package person;

public class basketteach extends teach{
    
    
   public basketteach() {
    
    
    }
    public basketteach(String name, int age) {
    
    
        super(name, age);
    }

    @Override
    public void teach() {
    
    
        System.out.println("篮球教练教篮球");
    }
}

9. 最終出力テストコード:(テストクラス、メインステートメントを使用)

9.1 new を使用して pingpangstudent クラス オブジェクトをインスタンス化し、pps インスタンス オブジェクトを取得します。
9.2 set ステートメントを使用して人間のプライベート パラメーター名と年齢パラメーターに値を代入し、get ステートメントを使用して名前と年齢パラメーターの値を読み取ります、値を出力します

9.3 以前に書き換えられた学生、eat メソッド、speakeng メソッドを呼び出します;
9.4 上記のアクション アプリケーションを繰り返し、他の 3 つのクラスの
9.5 で全体のテストを完了します

package person;

public class persondemo {
    
    
    public static void main(String[] args) {
    
    
        pingpangstudent pps= new pingpangstudent();
        pps.setName("乒乓球员");
        pps.setAge(30);
        System.out.println(pps.getName() +","+ pps.getAge() );
        pps.student();
        pps.eat();
        pps.speakeng();
        System.out.println("--------");
        pingpangteach ppt = new pingpangteach();
        ppt.setName("乒乓球教练");
        ppt.setAge(30);
        System.out.println(ppt.getName() +","+ ppt.getAge());
        ppt.teach();
        ppt.eat();
        ppt.speakeng();
        System.out.println("--------");
        basektballstudent bbs = new basektballstudent();
        bbs.setName("篮球运动员");
        bbs.setAge(32);
        System.out.println(bbs.getName() +","+ bbs.getAge());
        bbs.student();
        bbs.eat();
        System.out.println("--------");
        basketteach bt = new basketteach();
        bt.setName("篮球教练");
        bt.setAge(40);
        System.out.println(bt.getName() +"," + bt.getAge());
        bt.teach();
        bt.eat();
    }
}

高度な演習に適した例は、親クラス、サブクラス、インターフェイス、オブジェクト指向、抽象メソッド、およびプライベートのアプリケーションの深い理解を促進します。

Guess you like

Origin blog.csdn.net/weixin_52723971/article/details/110264783