連載
» 2008年02月25日 00時00分 公開

再利用性を高める抽象クラスを習得するソースコードで学ぶ SJC-P 5.0 ドリル(5)(2/2 ページ)

[山本道子,有限会社 Ray]
前のページへ 1|2       

解答

 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>
Super
{abstract}
抽象クラス
       extends
 
SubA
{abstract}
抽象クラス
       extends
 
SubB
具象クラス
サンプルコード2の実行結果 サンプルコード2の構成

筆者紹介

山本道子

有限会社Ray代表。千葉県出身。一般事務、派遣を経て2000年サン・マイクロシステムズ入社。J2SEのほか、J2EEなどサーバサイドJavaコース担当およびテキスト開発に携わる。2004年退職後、有限会社Rayを設立し、システム開発、インストラクタ、執筆などを手掛けている。



前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。