解答
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.