Javaにおける抽象クラス
Javaにおける抽象クラスは、デフォルトのメソッド実装を含むことを除けば、インターフェースに似ています。抽象クラスは、本体のない抽象メソッドを持つことができ、実装されたメソッドも持つことができます。abstractキーワードは、抽象クラスと抽象メソッドを作成するために使用されます。Javaの抽象クラスはインスタンス化することはできません。抽象クラスは、主にサブクラスが拡張し、抽象メソッドを実装し、抽象クラス内の実装されたメソッドをオーバーライドまたは使用するための基盤を提供するために使用されます。
Javaにおける抽象クラス
以下は、Javaでの抽象クラスの簡単な例です。
package com.scdev.design;
//abstract class
public abstract class Person {
private String name;
private String gender;
public Person(String nm, String gen){
this.name=nm;
this.gender=gen;
}
//abstract method
public abstract void work();
@Override
public String toString(){
return "Name="+this.name+"::Gender="+this.gender;
}
public void changeName(String newName) {
this.name = newName;
}
}
work()というメソッドは抽象メソッドであり、本体がありません。以下はJavaにおいて抽象クラスを拡張する具象クラスの例です。
package com.scdev.design;
public class Employee extends Person {
private int empId;
public Employee(String nm, String gen, int id) {
super(nm, gen);
this.empId=id;
}
@Override
public void work() {
if(empId == 0){
System.out.println("Not working");
}else{
System.out.println("Working as employee!!");
}
}
public static void main(String args[]){
//coding in terms of abstract classes
Person student = new Employee("Dove","Female",0);
Person employee = new Employee("Pankaj","Male",123);
student.work();
employee.work();
//using method implemented in abstract class - inheritance
employee.changeName("Pankaj Kumar");
System.out.println(employee.toString());
}
}
以下の日本語訳を提供いたします(1つの選択肢のみ):
Javaにおいて、サブクラスのEmployeeは継承を使用してスーパークラスのPersonのプロパティとメソッドを継承することに注意してください。また、EmployeeクラスでOverrideアノテーションが使用されていることにも注目してください。メソッドをオーバーライドする際に常にOverrideアノテーションを使用すべき理由については、詳細をお読みください。
Javaにおける抽象クラスの重要なポイント
-
- Javaでは、abstractキーワードを使用して抽象クラスを作成します。
-
- Javaの抽象クラスはインスタンス化できません。
-
- 抽象キーワードを使用して抽象メソッドを作成することができますが、抽象メソッドには本体がありません。
-
- クラスに抽象メソッドがある場合、そのクラスは抽象キーワードを使用して抽象クラスでなければなりません。そうでない場合、コンパイルされません。
-
- 抽象クラスには抽象メソッドを宣言しなくても構いません。抽象メソッドを宣言しないクラスでも、抽象としてマークすることができます。
-
- 抽象クラスにメソッドの実装がない場合は、Javaでは複数のクラスの継承をサポートしていないため、インターフェースを使用する方がよいです。
-
- Javaの抽象クラスのサブクラスは、サブクラスが抽象クラスでない限り、すべての抽象メソッドを実装する必要があります。
-
- インターフェースのすべてのメソッドは、静的メソッドまたはデフォルトメソッドでない限り、暗黙的に抽象です。Java 8では、インターフェースに静的メソッドとデフォルトメソッドが追加されています。詳細については、Java 8のインターフェースの変更をご覧ください。
-
- Javaの抽象クラスは、インターフェースのメソッドの実装を提供せずにインターフェースを実装することができます。
-
- Javaの抽象クラスは、すべてのサブクラスに共通のメソッド実装を提供するために、またはデフォルトの実装を提供するために使用されます。
- main()メソッドがあれば、抽象クラスを他のクラスと同様に実行することができます。
これがJavaの抽象クラスに関するすべてです。もし何か重要な点を見落としていたら、コメントで教えてください。