抽象メソッド
日本語 | 仮のメソッド |
英語 | abstract method |
ふりがな | ちゅうしょうめそっど |
フリガナ | チュウショウメソッド |
抽象クラスで宣言された、実装を持たないメソッド。「abstractメソッド」とも言う。
abstractという予約語を戻り値の前に置き、実装、つまり{}とその中身を作らず、;で閉じればこれが抽象メソッドとなる。
すべての抽象メソッドにabstractを付けなければならないため面倒。
ちなみにインターフェイスで宣言されたメソッドは「抽象メソッド」とは呼ばない。インターフェイスには「実装を持つメソッド」は存在しないし、またabstractも付けないためである。
abstractという予約語を戻り値の前に置き、実装、つまり{}とその中身を作らず、;で閉じればこれが抽象メソッドとなる。
すべての抽象メソッドにabstractを付けなければならないため面倒。
ちなみにインターフェイスで宣言されたメソッドは「抽象メソッド」とは呼ばない。インターフェイスには「実装を持つメソッド」は存在しないし、またabstractも付けないためである。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// SubAbstractClassクラスを使用してみます。
SubAbstractClass subAbstractClass = new SubAbstractClass();
subAbstractClass.output();
// SubAbstractClass#output()
// サブクラスからスーパークラス(抽象クラス)への
// アップキャストは可能です。その際、ポリモーフィズムが
// 適用されるのでスーパークラスからサブクラスのメソッドを
// 呼び出すことができます。
AbstractClass abstractClass = subAbstractClass;
abstractClass.output();
// SubAbstractClass#output()
}
}
/**
* AbstractClassクラスを宣言します。
*/
abstract class AbstractClass
{
/**
* 抽象メソッドを宣言します。
*/
public abstract void output();
// 実装はありません。
// もし抽象メソッドに実装があると、
// 以下のようなコンパイルエラーが
// 発生します。
// public void output2(){}
// コンパイルエラー:
// 抽象メソッドは本体を指定しません。
}
/**
* AbstractClassクラスのサブクラスSubAbstractClassを宣言します。
*/
class SubAbstractClass extends AbstractClass
{
/**
* AbstractClassクラスのメソッドを実装します。
* 方法はオーバーライドと同じ。
* 同名、同引数、同戻り値のメソッドを作ってください。
*/
public void output()
{
System.out.println( "SubAbstractClass#output()" );
}
// 抽象クラスから継承する場合には、すべての抽象メソッドを
// 実装する必要があります。たとえば、output()メソッドを
// 作り忘れると、以下のコンパイルエラーが発生します。
// コンパイルエラー:
// クラスは継承された抽象メソッド AbstractClass.output() をインプリメントする必要があります。
}
public class Sample
{
public static void main( String[] args )
{
// SubAbstractClassクラスを使用してみます。
SubAbstractClass subAbstractClass = new SubAbstractClass();
subAbstractClass.output();
// SubAbstractClass#output()
// サブクラスからスーパークラス(抽象クラス)への
// アップキャストは可能です。その際、ポリモーフィズムが
// 適用されるのでスーパークラスからサブクラスのメソッドを
// 呼び出すことができます。
AbstractClass abstractClass = subAbstractClass;
abstractClass.output();
// SubAbstractClass#output()
}
}
/**
* AbstractClassクラスを宣言します。
*/
abstract class AbstractClass
{
/**
* 抽象メソッドを宣言します。
*/
public abstract void output();
// 実装はありません。
// もし抽象メソッドに実装があると、
// 以下のようなコンパイルエラーが
// 発生します。
// public void output2(){}
// コンパイルエラー:
// 抽象メソッドは本体を指定しません。
}
/**
* AbstractClassクラスのサブクラスSubAbstractClassを宣言します。
*/
class SubAbstractClass extends AbstractClass
{
/**
* AbstractClassクラスのメソッドを実装します。
* 方法はオーバーライドと同じ。
* 同名、同引数、同戻り値のメソッドを作ってください。
*/
public void output()
{
System.out.println( "SubAbstractClass#output()" );
}
// 抽象クラスから継承する場合には、すべての抽象メソッドを
// 実装する必要があります。たとえば、output()メソッドを
// 作り忘れると、以下のコンパイルエラーが発生します。
// コンパイルエラー:
// クラスは継承された抽象メソッド AbstractClass.output() をインプリメントする必要があります。
}
// Sample.java public class Sample { public static void main( String[] args ) { // SubAbstractClassクラスを使用してみます。 SubAbstractClass subAbstractClass = new SubAbstractClass(); subAbstractClass.output(); // SubAbstractClass#output() // サブクラスからスーパークラス(抽象クラス)への // アップキャストは可能です。その際、ポリモーフィズムが // 適用されるのでスーパークラスからサブクラスのメソッドを // 呼び出すことができます。 AbstractClass abstractClass = subAbstractClass; abstractClass.output(); // SubAbstractClass#output() } } /** * AbstractClassクラスを宣言します。 */ abstract class AbstractClass { /** * 抽象メソッドを宣言します。 */ public abstract void output(); // 実装はありません。 // もし抽象メソッドに実装があると、 // 以下のようなコンパイルエラーが // 発生します。 // public void output2(){} // コンパイルエラー: // 抽象メソッドは本体を指定しません。 } /** * AbstractClassクラスのサブクラスSubAbstractClassを宣言します。 */ class SubAbstractClass extends AbstractClass { /** * AbstractClassクラスのメソッドを実装します。 * 方法はオーバーライドと同じ。 * 同名、同引数、同戻り値のメソッドを作ってください。 */ public void output() { System.out.println( "SubAbstractClass#output()" ); } // 抽象クラスから継承する場合には、すべての抽象メソッドを // 実装する必要があります。たとえば、output()メソッドを // 作り忘れると、以下のコンパイルエラーが発生します。 // コンパイルエラー: // クラスは継承された抽象メソッド AbstractClass.output() をインプリメントする必要があります。 }