Java-abstraction
Java-抽象化
辞書によると、 abstraction は、イベントではなくアイデアを扱う品質です。 たとえば、電子メールの場合、電子メールを送信するとすぐに起こることなどの複雑な詳細を考慮すると、電子メールサーバーが使用するプロトコルはユーザーから隠されます。 したがって、電子メールを送信するには、コンテンツを入力し、受信者のアドレスを記載して、[送信]をクリックするだけです。
同様に、オブジェクト指向プログラミングでは、抽象化は実装の詳細をユーザーから隠すプロセスであり、機能のみがユーザーに提供されます。 言い換えると、ユーザーは、オブジェクトの動作方法ではなく、オブジェクトの動作に関する情報を取得します。
Javaでは、抽象クラスとインターフェイスを使用して抽象化が実現されます。
抽象クラス
宣言に abstract キーワードを含むクラスは、抽象クラスと呼ばれます。
- 抽象クラスには、abstractメソッド、つまり本体のないメソッドが含まれる場合と含まれない場合があります(public void get();
- ただし、クラスに少なくとも1つの抽象メソッドがある場合、そのクラスは抽象として宣言する必要があります。
- クラスが抽象として宣言されている場合、インスタンス化することはできません。
- 抽象クラスを使用するには、別のクラスから継承し、その中の抽象メソッドに実装を提供する必要があります。
- 抽象クラスを継承する場合は、その中のすべての抽象メソッドに実装を提供する必要があります。
例
このセクションでは、抽象クラスの例を示します。 抽象クラスを作成するには、クラス宣言で、classキーワードの前に abstract キーワードを使用するだけです。
抽象メソッドを除き、EmployeeクラスはJavaの通常のクラスと同じであることがわかります。 クラスは抽象になりましたが、まだ3つのフィールド、7つのメソッド、および1つのコンストラクターがあります。
今、あなたは次の方法で従業員クラスをインスタンス化しようとすることができます-
上記のクラスをコンパイルすると、次のエラーが表示されます-
抽象クラスの継承
私たちは、次の方法で具体的なクラスのように従業員クラスのプロパティを継承することができます-
例
ここでは、Employeeクラスをインスタンス化することはできませんが、Salaryクラスをインスタンス化することはでき、このインスタンスを使用して、以下に示すようにEmployeeクラスの3つのフィールドすべてと7つのメソッドにアクセスできます。
これは、次の結果を生成します-
出力
抽象メソッド
クラスに特定のメソッドを含めたいが、そのメソッドの実際の実装を子クラスによって決定したい場合、親クラスのメソッドを抽象として宣言できます。
- abstract キーワードは、メソッドを抽象として宣言するために使用されます。
- メソッド宣言では、メソッド名の前に abstract キーワードを配置する必要があります。
- 抽象メソッドにはメソッドシグネチャが含まれますが、メソッド本体は含まれません。
- 中括弧の代わりに、抽象メソッドは末尾にセミコロン(;)を持ちます。
以下は、抽象メソッドの例です。
例
メソッドを抽象として宣言すると、2つの結果が生じます-
- それを含むクラスは抽象として宣言する必要があります。
- 現在のクラスを継承するクラスは、抽象メソッドをオーバーライドするか、自身を抽象として宣言する必要があります。
注-最終的に、子孫クラスは抽象メソッドを実装する必要があります。そうしないと、インスタンス化できない抽象クラスの階層ができてしまいます。
給与クラスが従業員クラスを継承し、次に示すように* computePay()*メソッドを実装する必要があると仮定します-