ホームページ >Java >&#&チュートリアル >Java キーワード抽象の使用方法
abstract
: abstract
abstract
できるクラスとメソッドを変更するために使用されます。
abstract
を使用して変数、コード ブロック、コンストラクターを変更することはできません。
abstract
を使用してプライベート メソッド、静的メソッド、final
メソッド、および final
クラスを変更することはできません。
サブクラスがインスタンス化されるときの呼び出しを容易にするために、抽象クラスにはコンストラクターが必要です ( : サブクラス クラスオブジェクトのインスタンス化のプロセス全体)。
開発中、サブクラス オブジェクトをインスタンス化し、関連する操作を完了するために、抽象クラスのサブクラスが提供されます。
抽象クラスはインスタンス化できません。抽象クラスは継承されることを目的としており、抽象クラスのサブクラスは親クラスの抽象メソッドをオーバーライドし、メソッド本体を提供する必要があります。すべての抽象メソッドが書き換えられていない場合でも、それは依然として抽象クラスです。
抽象メソッドにはメソッドの宣言のみがあり、メソッドの実装はありません。セミコロンで終わります。
public abstract void talk();
抽象メソッドを含むクラスは、抽象クラスとして宣言する必要があります。逆に、抽象クラスには抽象メソッドを含めることはできません。
このサブクラスは、サブクラスが親クラス内のすべての抽象メソッドをオーバーライドする場合にのみインスタンス化できます。
サブクラスが親クラスのすべての抽象メソッドをオーバーライドしない場合、サブクラスも抽象クラスであるため、abstract
を使用して変更する必要があります。
public class AbstractTest { public static void main(String[] args) { //一旦Person类抽象了,就不可实例化 // Person p1 = new Person(); // p1.eat(); } } abstract class Creature{ public abstract void breath(); } abstract class Person extends Creature{ String name; int age; public Person(){ } public Person(String name,int age){ this.name = name; this.age = age; } //不是抽象方法: // public void eat(){ // // } //抽象方法 public abstract void eat(); public void walk(){ System.out.println("人走路"); } } class Student extends Person{ public Student(String name,int age){ super(name,age); } public Student(){ } public void eat(){ System.out.println("学生多吃有营养的食物"); } @Override public void breath() { System.out.println("学生应该呼吸新鲜的没有雾霾的空气"); } }
public class Test1 { public static void main(String args[]) { A a = new B(); a.m1();//B类中定义的m1方法 a.m2();//A类中定义的m2方法 } } abstract class A { abstract void m1(); public void m2() { System.out.println("A类中定义的m2方法"); } } class B extends A { void m1() { System.out.println("B类中定义的m1方法"); } }
public class PersonTest { public static void main(String[] args) { //匿名对象 method(new Student()); //非匿名的类非匿名的对象 Worker worker = new Worker(); method1(worker); //非匿名的类匿名的对象 method1(new Worker()); //创建了一匿名子类的对象:p Person p = new Person(){ @Override public void eat() { System.out.println("吃东西"); } @Override public void breath() { System.out.println("好好呼吸"); } }; method1(p); //创建匿名子类的匿名对象 method1(new Person(){ @Override public void eat() { System.out.println("吃好吃东西"); } @Override public void breath() { System.out.println("好好呼吸新鲜空气"); } }); } public static void method1(Person p){ p.eat(); p.breath(); } public static void method(Student s){ } } class Worker extends Person{ @Override public void eat() { } @Override public void breath() { } }
抽象クラスはテンプレート パターンの設計を具体化します。抽象クラスは複数のサブクラスの共通テンプレートとして機能し、サブクラスは抽象クラスに基づいて展開および変換されます。サブクラスは通常、抽象クラスの動作を保持します。
関数の内部実装の一部が確実である場合、実装の一部は不確実です。このとき、不確実な部分を公開し、サブクラスに実装させることができます。
言い換えれば、ソフトウェア開発でアルゴリズムを実装する場合、全体的な手順は非常に固定的かつ共通であり、これらの手順はすでに親クラスに記述されています。ただし、一部の部分は揮発性であり、揮発性部分は抽象化され、さまざまなサブクラスによって実装できます。これはテンプレートパターンです。
テンプレート メソッドの設計パターンは、プログラミングでよく使用されるパターンです。これは、あらゆるフレームワークとクラス ライブラリに影を落としています。たとえば、一般的なものは次のとおりです:
データベース アクセスのカプセル化;
Junit
単体テスト;
JavaWeb;
の
Servlet での
doGet/doPost
のテンプレート プログラム;
in JDBCTemlate
、HibernateTemplate
、など;
abstract class Template { public final void getTime() { long start = System.currentTimeMillis(); code(); long end = System.currentTimeMillis(); System.out.println("执行时间是:" + (end - start)); } public abstract void code(); } class SubTemplate extends Template { public void code() { for (int i = 0; i < 10000; i++) { System.out.println(i); } } }
以上がJava キーワード抽象の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。