目次
1.抽象クラスの概要
2.抽象クラスの特性
3.抽象クラスの場合
4.抽象クラスの詳細
抽象クラスの概要
- 抽象的な定義
–抽象化とは、複数のものから共通かつ本質的な内容を抽出することです。
–
- 抽象クラス
–Java では、メソッド本体のないメソッドを定義できます。メソッドの具体的な実装はサブクラスによって完了します。このメソッドは抽象メソッドと呼ばれ、抽象メソッドを含むクラスは抽象クラスです。
抽象メソッドの起源:
多くのオブジェクトは同じ機能を持っているが、その機能の具体的な内容が異なるため、抽出処理の際に関数の定義のみが抽出され、関数の主体は抽出されず、関数のステートメントのみが存在する 関数のないメソッドサブジェクトは抽象メソッドと呼ばれていました。
たとえば、オオカミと犬はどちらも咆哮の仕方を持っていますが、咆哮の内容は異なります。したがって、抽象的なイヌ科は咆哮という機能を持っているが、その咆哮の詳細は明らかではない。
それが抽象メソッドなのか抽象クラスなのかを知るにはどうすればよいでしょうか?キーワード abstractsct で変更されているかどうかを確認してください。
注:抽象クラスを継承するクラスは、その抽象メソッドをすべて書き直す必要があります。それ以外の場合、クラスは抽象クラスでなければなりません
説明を読むと、抽象クラスのコードをどうやって書けばいいのか?コードのコメントは明確で理解しやすいため、次のように記述する必要があります。
package com.demo01;
/*
* abstract:关键字,用于修饰方法和类
* 抽象方法:不同类的方法是相似,但是具体内容又不太一样,所以我们只能抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法
* 抽象类:有抽象方法的类必须是抽象类
*
* 注意:一个类继承了抽象类需要重写他所有的抽象方法,否则这个类就得是抽象类
*/
public class ExtendsDemo {
}
abstract class Animal {
// 抽像方法
public abstract void eat(); // 没有方法体的方法
//非抽象方法子类可以不重写
public void run() {
}
}
// 猫的子类 必须要实现eat方法
class Cat extends Animal {
// 证明实现的是父类里边的方法,或者是继承的父类里边的方法
@Override
// 这个必须要实现父类里边的抽象方法,否则会报错
public void eat() {
System.out.println("猫吃鱼");
}
}
//狗的抽象子类
abstract class Dog extends Animal {
// 这个方法可以不是现父类里边的方法,因为它也是一个抽象类
public void eat() {
System.out.println("狗吃屎");
}
}
抽象クラスの特徴
- 抽象メソッドは抽象クラス内に存在する必要があり、通常のクラス内に抽象クラスを定義することはできません。
- 抽象メソッドと抽象クラスは両方とも、abstract キーワードを使用して変更する必要があります
- 抽象メソッドを呼び出すのは意味がないため、抽象クラスは new を使用してオブジェクトを作成できません。
- 抽象クラスで抽象メソッドを使用するには、サブクラスですべての抽象メソッドを上書きし、呼び出すサブクラス オブジェクトを作成する必要があります。サブクラスが一部の抽象メソッドのみをカバーする場合でも、サブクラスは依然として抽象クラスです。
- 抽象クラスには抽象メソッドまたは非抽象メソッドを含めることができます
- 抽象クラスと一般クラスの間には大きな違いはありません。物事をどのように記述すべきかを記述しますが、その物事について理解できない点がいくつかあります。物の機能でもあるこの不確定な部分は、明示的に現れる必要があります。ただし、本体は定義できません。つまり、一般クラスよりも抽象的なメソッドが含まれているだけです。
- 特別: 抽象クラスで抽象メソッドを定義する必要はありません。これにより、クラスがオブジェクトを作成できなくなるだけです。
コードを使用して異議申し立ての理解を説明します。コードは次のとおりです。
package com.demo01;
/*
* 抽象类的特点:
* 抽象方法只能在抽象类里面
* 抽象类和抽象方法必须被abstract修饰
* 抽象类不能创建对象(不能实例化)
* 抽象类中可以有非抽象的方法
* 抽象类和类的关系也是继承
* 一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类
*/
public class ExtendsDemo {
public static void main(String[] args) {
//Animal a = new Animal();
Cat cat = new Cat();
cat.eat();
cat.sleep();
cat.run();
}
}
// 抽象类
abstract class Animal {
// 非抽象方法
public void eat() {
}
// 非抽象方法
public void sleep() {
}
// 抽象方法
public abstract void run() ;
}
// 非抽象类
class Cat extends Animal {
@Override
public void sleep() {
// TODO Auto-generated method stub
}
public void run(){
}
}
抽象クラスのメンバーの特性
- メンバー変数
–可以有变量
–定数を含めることができます
- 施工方法
–コンストラクターを持つことができます
- メンバーメソッド
–抽象メソッドを使用できる
–非抽象メソッドを使用できる
注: あなたはコンストラクタであるため、クラスを呼び出すとき、最初に呼び出すのはコンストラクタです。通常のコンストラクタはオブジェクトと一緒に存在します。あなたが抽象コンストラクタである場合、まったく意味がありません。コンストラクタは、抽象メソッド。
コードは次のように理解されます。
package com.demo01;
import com.demo01.Animal;
import com.demo01.Dog;
/*
* 抽象类的成员特点:
* 成员变量
* 可以有成员变量
* 可以有常量
* 成员方法
* 可以有抽象方法
* 可以有非抽象方法
* 构造方法
* 可以有构造方法的,需要对抽象类的成员变量进行初始化
*
* final:修饰类、成员变量、成员方法
*/
public class ExtendsDemo {
public static void main(String[] args) {
Dog d = new Dog();
d.barking();
d.eat();
}
}
// 抽象类
abstract class Animal {
String name = "哮天犬";
// 常量修饰符,不可以被修改,不可以赋新的值
final int NUM = 10;
public Animal() {
System.out.println("我是抽象类的构造方法");
}
public Animal(int n) {
System.out.println("我是抽象类的构造方法");
}
public abstract void eat();
public void run() {
}
}
// 子类继承父类
class Dog extends Animal {
public void barking() {
System.out.println(name);
System.out.println(NUM);
}
public void eat() {
System.out.println("吃");
}
}
抽象クラスのケース
教師の例、与えられた内容に基づいて継承システムを設計する
–具体的な内容: 基礎クラスの教師、就職クラスの教師
–共通の特徴: 名前、教室、講義。
生徒の例 (練習) - 同様、自分で練習
–具体的な内容: 基礎クラスの生徒、就職クラスの生徒
–共通の特徴: 名前、学歴
コードは以下のように表示されます:
package com.demo01;
import com.demo01.BasicTeacher;
import com.demo01.JobTeacher;
import com.demo01.Teacher;
/*
* 基础班老师,就业班老师
*
* 共性:
* 属性 姓名,年龄,性别
* 行为 讲课,唱歌
*/
public class ExtendsDemo {
public static void main(String[] args) {
BasicTeacher bt = new BasicTeacher();
bt.name = "张老师";
bt.teach();
JobTeacher jt = new JobTeacher();
jt.name = "王老师";
jt.teach();
}
}
//定义一个抽象类(父类)
abstract class Teacher {
String name;//姓名
int age;//年龄
String gender;//性别
//讲课
public abstract void teach();
}
// 定义一个子类
class BasicTeacher extends Teacher {
@Override
public void teach() {
System.out.println(name + "讲基础班课程");
}
}
class JobTeacher extends Teacher {
@Override
public void teach() {
System.out.println(name + "讲就业班课程");
}
}
抽象クラスの詳細
- 抽象キーワードと共存できないキーワードはどれですか?
回答: は、final および paivate と一緒に使用できません。(1) Final キーワードを追加すると、キーワードは継承できないことを意味しますが、abstract はオブジェクトを作成できず、継承のみが可能です。抽象クラスのメンバー変数およびメンバー メソッドにアクセスするオブジェクトを作成するため、abstract を Final と共有することはできません。 (2) Abstract は他のクラスによって継承および使用される必要があり、pravite はプライベートであり、他のクラスは誰も見ることができません。
- 抽象クラスにコンストラクターはありますか?
回答: はい、抽象クラスでは、他のクラスからもアクセスされることが予想されるいくつかの変数と定数も定義できるため、初期化プロセスもあります。コンストラクターを記述する必要はありませんが、デフォルトの暗黙的なコンストラクターがあります。コンストラクタ。
- 抽象クラスには抽象メソッドは存在できません?
回答: 通常は存在しますが、存在しない可能性もあります。他のクラスは私のクラスを継承できますが、私のクラスを新規作成することはできません。
抽象类的思想
(1) 抽象クラスでは、抽象メソッドを定義しますが、仕様を定義するだけで、他のクラスが抽象クラスを継承する場合は、その仕様に従って実行する必要があります。
(2) Writer と Reader は Java の抽象クラスです。