OOP の概念では、すべてのオブジェクトはクラスを通じて記述されますが、オブジェクトの記述にすべてのクラスが使用されるわけではありません。クラスに具体的なオブジェクトを説明するのに十分な情報が含まれていない場合、そのようなクラスは抽象クラスと呼ばれます。
抽象クラス: (1) 抽象クラスはオブジェクトをインスタンス化できません。オブジェクトがインスタンス化されている場合、コンパイルは通りません。抽象クラスの非抽象サブクラスのみが、メンバー変数、メンバー メソッド、コンストラクターなどを含むオブジェクト (2) を作成できます。 (3) コンストラクターとクラス メソッド (static で変更されたメソッド) は、抽象メソッドとして宣言できません。
抽象メソッド: (1) クラスに抽象メソッドが含まれる場合、そのクラスは抽象クラスである必要があります (2)任意 サブクラスは、親クラスの抽象メソッドをオーバーライドするか、それ自体を抽象クラスとして宣言する必要があります
#定義: 抽象クラス クラス名##2. 例: 動物に餌をやる農民
爬虫類、哺乳類: 抽象クラスの継承
ヘビ、トラ、ヤギ、ウサギ: それぞれ爬虫類または哺乳類を継承
fammer:bringWater(), feedWater(Animal 動物)---- 指定された場所に水を運ぶ役割を果たし、動物は目的地まで移動して水を飲みます
コードは次のとおりです:
package abstractDemo; /** * @author lpx * @Description TODO * @date 2021-04-07 */ public abstract class Animal { abstract String getName(); abstract void move(String destination); abstract void drink(); } abstract class Reptile extends Animal{ } abstract class Mammal extends Animal{ } class Tiger extends Mammal{ private static String name="tiger"; @Override String getName() { return this.name; } @Override void move(String destination) { System.out.println("tiger move to "+destination+"."); } @Override void drink() { System.out.println("tiger lower it is head and drink"); } } class Goat extends Mammal{ private static String name="goat"; @Override String getName() { return this.name; } @Override void move(String destination) { System.out.println("goat move to "+destination+"."); } @Override void drink() { System.out.println("goat lower it head to drink"); } } class Rabbit extends Mammal{ private static String name="rabbit"; @Override String getName() { return this.name; } @Override void move(String destination) { System.out.println("rabbit move to "+destination+"."); } @Override void drink() { System.out.println("rabbit put out it is tongue and drink"); } } class Snake extends Reptile{ private static String name="snake"; @Override String getName() { return this.name; } @Override void move(String destination) { System.out.println("snake move to "+destination+"."); } @Override void drink() { System.out.println("snake dived into and drink"); } } class Farmer{ public void bringWater(String destination){ System.out.println("Farmer bring water to " + destination + "."); } public void feedWater(Animal a){ // polymorphism this.bringWater("Feeding Room"); a.move("Feeding Room"); a.drink(); } } class Test{ public static void main(String[] args) { Farmer fm=new Farmer(); Snake snake=new Snake(); Goat goat=new Goat(); Tiger tiger=new Tiger(); Rabbit rabbit=new Rabbit(); fm.feedWater(snake); fm.feedWater(goat); fm.feedWater(tiger); fm.feedWater(rabbit); } }
実行結果:
##概要:
それぞれの動物が抽象化されていない場合、ドリンクメソッドとムーブメソッドについては、ポリモーフィズムを実現できません。ファーマー クラスは、さまざまなパラメーターに従って複数の feedWaters をオーバーロードする必要があります。動物を追加し続けると、リロードの回数が増加します。比較と理解を容易にするために、これも従来の考え方に従って書きました。コードは次のとおりです:package abstractDemo; /** * @author lpx * @Description TODO * @date 2021-04-07 */ class Tiger1{ private static String name="tiger"; String getName() { return this.name; } void move(String destination) { System.out.println("tiger move to "+destination+"."); } void drink() { System.out.println("tiger lower it is head and drink"); } } class Goat1{ private static String name="goat"; String getName() { return this.name; } void move(String destination) { System.out.println("goat move to "+destination+"."); } void drink() { System.out.println("goat lower it head to drink"); } } class Rabbit1{ private static String name="rabbit"; String getName() { return this.name; } void move(String destination) { System.out.println("rabbit move to "+destination+"."); } void drink() { System.out.println("rabbit put out it is tongue and drink"); } } class Farmer1{ public void bringWater(String destination){ System.out.println("Farmer bring water to " + destination + "."); } public void feedWater(Goat1 goat){ // polymorphism this.bringWater("Feeding Room"); goat.move("Feeding Room"); goat.drink(); } public void feedWater(Tiger1 tiger){ // polymorphism this.bringWater("Feeding Room"); tiger.move("Feeding Room"); tiger.drink(); } public void feedWater(Rabbit1 rabbit1) { this.bringWater("Feeding Room"); rabbit1.move("Feeding Room"); rabbit1.drink(); } } public class Test1{ public static void main(String[] args) { Farmer1 farmer1=new Farmer1(); Tiger1 tiger1=new Tiger1(); Goat1 goat1=new Goat1(); Rabbit1 rabbit1=new Rabbit1(); farmer1.feedWater(tiger1); farmer1.feedWater(goat1); farmer1.feedWater(rabbit1); } }
以上がJava抽象定義の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。