Java抽象クラスの使用の概要


1.抽象クラスの概念

オブジェクト指向の概念では、すべてのオブジェクトはクラスによって記述されますが、逆に、すべてのクラスがオブジェクトの記述に使用されるわけではありません。クラスに特定のオブジェクトを記述するのに十分な情報が含まれていない場合、そのようなクラスは抽象クラスです。

第二に、抽象クラスの使用

1.抽象クラスと抽象メソッドの形式

抽象キーはabstract

抽象クラス:プラス抽象キーワードの変更
抽象メソッド:プラス抽象キーワードの変更中括弧を削除します

public abstract class Animal {
    
    
    //抽象方法
    public abstract void eat();
    public abstract void sleep();

    //成员方法
    public void methodTest(){
    
    
    }
}

【注意】

1. 抽象方法一定在抽象类中抽象类不一定有抽象方法
2。抽象类仍然可以有成员变量、成员方法、构造方法

2.抽象クラスと抽象メソッドの使用

抽象クラスと抽象メソッドを使用する場合は、継承関係が必要です
抽象化は継承に基づいて生成されます。継承に慣れていない場合は、ここをクリックしてください
。Frist
抽象クラスPersonを定義します。

Personクラスに属性とメソッドを追加します

public abstract class Person{
    
    
    //抽象类可以拥有成员属性、成员方法、构造方法
    String name;
    String sex;
    //定义两个抽象方法
    public abstract void eat();
    public abstract void sleep();
}

2番目
は、Personクラスを継承するStudentクラス(studentクラス)を定義します

学生クラスは抽象的なPersonのサブクラスです。必须实现(重写)Person类的所有抽象方法

public class Student extends Person{
    
    
    @Override
    public void eat() {
    
    
        System.out.println("学生吃饭了");
    }
    @Override
    public void sleep() {
    
    
        System.out.println("学生睡觉了");
    }
}

3番目
は、テストクラスを定義し、サブクラスオブジェクトを作成して、

public class Test{
    
    
    public static void main(String[] args) {
    
    
    Student s = new Student();
    s.eat();
    s.sleep();
    }
}

演算結果:
ここに画像の説明を挿入します
【注意】

1.抽象クラスは具有所有普通类具拥有的东西
2できます。中括弧なしの抽象メソッド
3.4 抽象类不能创建对象
抽象类中不一定有抽象方法しかし有抽象方法的类一定是抽象类
5。抽象クラスのサブクラスは、親クラスのすべての抽象メソッドをオーバーライドする必要があります子类是抽象类除外
6。抽象クラスの構築メソッドは、親クラスのメンバーを初期化するためにサブクラスに提供されます


これを見ると、抽象クラスは不要だと感じるかもしれませんので、引き続き見下ろしてください。


3.抽象クラスの意味

抽象クラス约束了继承它的子类,必须实现某一种或多种功能
それを実生活に置くことは置くことができます抽象クラスは規範として理解されています

例:
携帯電話と同じように、電話をかけたりテキストメッセージを送信したりするための最も基本的な機能を備えています。これにより、抽象クラスを派生させることができます。抽象クラスは、呼び出しとテキストメッセージの抽象メソッドを定義する必要があります。抽象クラスは特定の実装に関係する必要はありませんが、すべての携帯電話(サブクラス)が呼び出しとテキストメッセージの機能を実装する必要があります。

4.抽象クラスの使用例

抽象Personクラスを定義する

プロパティとメソッドを追加する

public abstract class Person{
    
    
    String name;
    String sex;
    //Person类吃饭的抽象方法
    public abstract void eat();
    //Person类睡觉的抽象方法
    public abstract void sleep();
}

抽象学生クラスを定義する

Person抽象クラスを継承します

public abstract class Student extends Person{
    
    
	//这里只实现了Person类的eat(),因为抽象子类对抽象父类得抽象方法实现是没有要求的
    @Override
    public void eat() {
    
    
        System.out.println("学生吃饭了");
    }
    //Student类学习的抽象方法
    public abstract void study();
}

【注意】

抽象子类かどうかが实现抽象父类的抽象方法ある随意
、これは食べるために、抽象メソッドのみ抽象クラスが実装されることに注意してください。他のクラスがStudentクラスを継承する場合、Studentクラスが実装していない親クラスの抽象メソッドとStudentクラスの抽象メソッドを実装する必要があります。

2つの学生サブクラス(GoodStudentクラスとBadStudentクラス)を定義します

Student抽象クラスを継承する

 public class GoodStudent extends Student {
    
    
 
    static{
    
    
        System.out.println("我是好学生");
    }
    
    //实现Person类的sleep方法
    @Override
    public void sleep() {
    
    
        System.out.println("好学生睡觉了");
    }
    
    //实现Student类的study方法
    @Override
    public void study() {
    
    
        System.out.println("好学生在学习");
    }
    
}
public class BadStudent extends Student {
    
    

    static{
    
    
        System.out.println("我是坏学生");
    }
    
    //重写Student类eat方法
    @Override
    public void eat(){
    
    
        System.out.println("我最能吃");
    }
    
    //实现Person类的sleep方法
    @Override
    public void sleep() {
    
    
        System.out.println("坏学生没睡觉");
    }
    
    //实现Student类的study方法
    @Override
    public void study() {
    
    
        System.out.println("坏学生没学习");
    }
    
}

GoodStudentクラスとBadStudentクラスは、実装されていないすべての抽象メソッドを実装する必要があります実装された抽象メソッドは、必要に応じて書き直すこともできます

テストクラスを作成し、プログラムの実行結果を表示する

public class Test{
    
    
    public static void main(String[] args) {
    
    
        //创建好学生对象
        GoodStudent goodStudent = new GoodStudent();
        goodStudent.eat();
        goodStudent.study();
        goodStudent.sleep();
        System.out.println("==============");
        //创建坏学生对象
        BadStudent badStudent = new BadStudent();
        badStudent.eat();
        badStudent.study();
        badStudent.sleep();
    }
}

運転結果
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_44580492/article/details/106300270