解答
C、E
解説
Aは、メソッド定義の終わりが;となっているためコンパイルエラーです。
A. class Bar extends Foo {
public void methodA();
} |
Bは、メソッドの終わりが{ }となっていますが、abstractキーワードを使用しているためコンパイルエラーです。
B. class Bar extends Foo {
abstract public void methodA() { }
} |
Cは、Fooクラスの抽象メソッドを正しくオーバーライドしているため問題ありません。
C. class Bar extends Foo {
public void methodA() { }
} |
なお、Fooクラスの4行目で宣言しているmethodA()は、publicとabstractが逆でも正しい記述です。
4. public abstract void methodA(); // この記述でも可 |
Dは、抽象メソッドであるmethodA()メソッドをオーバーライドしていないため、コンパイルエラーです。
D. class Bar extends Foo { } |
Eは、クラス宣言がabstractとなっているため、スーパークラスの抽象メソッドであるmethodA()メソッドをオーバーライドしていなくても問題ありません。ただし、Barクラスをスーパークラスに持つ具象サブクラスを定義した場合、FooクラスのmethodA()メソッドを正しくオーバーライドする必要があります。
E. abstract class Bar extends Foo { } |
【問題】
次のソースコードがあります。
1. abstract class Foo {
2. private int val1;
3. private int val2;
4. abstract public void methodA();
5. public void methodB(){ System.out.println("methodB"); }
6. }
Fooクラスを正しく使用しているものを2つ選択してください。
A. class Bar extends Foo {
public void methodA();
}
B. class Bar extends Foo {
abstract public void methodA() { }
}
C. class Bar extends Foo {
public void methodA() { }
}
D. class Bar extends Foo { }
E. abstract class Bar extends Foo { } |
ある抽象クラスを基に、抽象サブクラスを作成することができます。継承関係を持つため、抽象サブクラスを作成する際にはextendsを使用します。
abstract class Super { // スーパークラス
void methodX(){ System.out.println("Super : methodX()"); }
abstract void methodY(); // 抽象メソッド
abstract void methodZ(); // 抽象メソッド
}
abstract class SubA extends Super { // Superクラスの抽象サブクラス
// SubAクラスでは、methodY()メソッドのみ実装
void methodY(){ System.out.println("SubA : methodY()"); }
}
class SubB extends SubA { // SubAクラスの具象サブクラス
// SubBクラスでは、methodZ()メソッドを実装
void methodZ(){ System.out.println("SubB : methodZ()"); }
}
class Sample2 {
public static void main(String[] args) {
SubB obj = new SubB();
obj.methodX();
obj.methodY();
obj.methodZ();
}
} |
| サンプルコード2 抽象クラスから抽象サブクラスを作成する例 |
C:\Sample> C:\Sample>Java Sample2 Super : methodX() SubA : methodY() SubB : methodZ() C:\Sample> |
|
抽象クラス | |
↑ extends |
|||
|
抽象クラス | ||
↑ extends |
|||
|
具象クラス | ||
| サンプルコード2の実行結果 | サンプルコード2の構成 | ||
山本道子
有限会社Ray代表。千葉県出身。一般事務、派遣を経て2000年サン・マイクロシステムズ入社。J2SEのほか、J2EEなどサーバサイドJavaコース担当およびテキスト開発に携わる。2004年退職後、有限会社Rayを設立し、システム開発、インストラクタ、執筆などを手掛けている。
Copyright © ITmedia, Inc. All Rights Reserved.