本連載は、サン・マイクロシステムズ認定のJava資格Sun Certified Programmer for Java 2 Platform 5.0(SJC-P5.0)に対応しています。最新の出題傾向に基づいて、ソースコードの問題を中心に毎回模擬問題を1問出題します。ソースコードに慣れながら、SJC-P合格を目指して頑張りましょう。
連載第5回の今回は、抽象クラスに関する出題です。
抽象クラスは通常のクラスとは異なり、メソッド名を宣言するだけで、処理内容を記述しないメソッドを持つクラスです。このメソッドを抽象メソッドと呼びます。
抽象クラスは、処理内容を持つメソッドと抽象メソッドを混在して用意することができます。また、スーパークラスとして利用される目的で用意され、抽象クラス自体をインスタンス化することはできません。
クラス宣言にはabstractキーワードを使用します。
【構文】
[修飾子] abstract class クラス名 { }
※[修飾子]とabstractの記述が逆でも問題ない
(例)
public abstract class Sample { }
抽象メソッドは、abstractキーワードを使用することと、処理内容を記述しないことが決まりです。従って、メソッド名(引数)の後に{ }を付けてはいけません。
【構文】
[修飾子] abstract 戻り値の型 メソッド名(引数リスト);
※[修飾子]とabstractの記述が逆でも問題ない
(例)
public abstract void methodA();
抽象クラス自体をインスタンス化して使用することはできません。スーパークラスとして利用します。従って、extendsキーワードを使用して抽象クラスを基にサブクラスを作成し、再利用を行います。サブクラスは、必要に応じてスーパークラスのメソッドをオーバーライドできますが、抽象クラスを基に具象サブクラスを作成する場合は、抽象クラスで宣言された抽象メソッドを必ずオーバーライドしなくてはいけません。
abstract class Super { protected abstract void methodA(); // 抽象メソッド public void methodB(){ // 通常のメソッド System.out.println("Super"); } } class Sub extends Super { protected void methodA(){} // 必須。抽象メソッドは必ず実装 // 以下でもOK。アクセス修飾子は同じか公開範囲の広いものを使用 // public void methodA(){} public void methodB(){ // 任意。必要に応じて実装可能 System.out.println("Super"); } } |
サンプルコード1 抽象クラスを使用したソースコードの例 |
以下の問題を考えてみてください。解答と解説は次のページにあります。
問題
次のソースコードがあります。
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 { }
Copyright © ITmedia, Inc. All Rights Reserved.