【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷




―Javaプログラミングの前提知識―

@ITハイブックス編
2003/2/27
Javaプログラミング
ワンポイントレクチャーについて

   インターフェイスとは

   ワンポイントQuestion

 以下のようなソースコードがあります。

public interface DefAction {
  void doStart();
  void doStop();
}
public interface SubAction extends DefAction {
  void doLoop();
}
public interface ActionMark { }

 次の説明のうち、誤っているものはどれですか? (複数選択)

A public class MyAction implements DefAction, ActionMark { } とクラス宣言できる
B public class MyAction extends DefAction { } とクラス宣言できる
C MyActionクラスがDefActionを実装する場合、DefAction act = new MyAction();とすることができる
D SubActionを実装するクラスは必ずdoStart(), doStop(), doLoop()メソ ッドを実装しなければならない
E 上記ソースコードをコンパイルすると、DefAction.inter、SubAction.inter、ActionMart.interと3つのファイルが生成される


   配列の宣言方法

インタフェースとはクラス定義の雛型として使用するものです。その中には定数とメソッドを定義できますが、メソッドには処理の実装がされません。 インタフェースの定義はキーワード「interface」を使用して次のようになります。

interface インタフェース名 {
  定数;
  メソッド;
}

インタフェース宣言ではクラス宣言と同じく、変数やメソッドを定義します。またパッケージ化することもできるので、別パッケージから利用したい場合はクラス定義と同様にpublic指定しておきます。

 しかし、正確には以下のような点でクラスとは異なります。

  • キーワード「interface」を使って宣言します。
  • インタフェース内のフィールドは必ず定数とします。
  • インタフェース内のメソッドは処理を記述しません。
  • インタフェースからインスタンスは作成できません。

例)
public interface MyInterface {
String str = "Hello";
void start();
void stop();
}

また、クラスと同様にインタフェースを派生した別のインタフェースを作成することも可能です。

例)
public interface SubInterface extends MyInterface {
  void play();
}

インタフェースからオブジェクトを作成することはできません。上記例の続きで

MyInterface my = new MyInterface();

とするとコンパイルエラーになります。

 インタフェースはクラスに実装して使用します。クラスに実装する場合、キーワード「implements」を使用して次のようになります。

class クラス名 implements インタフェース名 { // クラス定義 }

例)
public class MyClass implements MyInterface {
  void start() { //startの処理 }
  void stop() { //stopの処理 }
}

 インタフェースを実装したクラスは、インタフェースに宣言されている全メソッドを必ずクラス定義に含めなくてはいけません(上の例のstart()、stop())。

 また、1つのクラスに対して複数のインタフェースを実装することもできます。

例)
public class MyClass implements MyInterface, OtherInterface { // クラス定義 }

 このことから、インタフェースを実装したクラスは、インタフェースに宣言されたメソッドや変数を必ずもつことになります。また、別クラスでも同じインタフェースを実装している場合は、それぞれのクラスに同じメソッド、変数が存在することになります。

  そのため、同じインタフェースを実装したすべてのクラスには、必要なメソッドや変数が定義されていると保証されることになります。

 システムの規模が大きくなった場合などにインタフェースを使うと、仕様の統一をはかることができます。

 本設問の選択肢Bで、DefActionはインタフェースなのでextends指定ではありません。また、インタフェースそのものをnewすることはできませんが、インタフェースの変数にそのインタフェースを実装したクラスのオブジェクトを代入することは可能なので、選択肢Cは正しい説明です。

POINT

●public指定されたインタフェース内では、暗黙的に定数はpublic static final、メソッドはpublic abstractとなります。
●インタフェースのソースファイル名も拡張子.javaがつき、コンパイルすると拡張子.classがつくファイルが生成されます。
●インタフェースは抽象クラス(abstractクラス)の概念をさらに抽象化した概念です。
● 代表的なインタフェースには、次のようなものがあります。

java.lang.Runnableインタフェース スレッド処理時に使用します
java.awt.event.ActionListenerインタフェース イベント処理時に使用します
java.io.Serializableインタフェース シリアライゼーションしたいクラスに実装するインタフェースです。マーカインタフェースのためメソッドは定義されていません

KEYWORD

■派生
既存のクラス、インタフェースを継承した別のクラスやインタフェースを作成することを派生とよびます。

■マーカインタフェース
インタフェース宣言だけで、実際の定義は空になっているインタフェースをいいます。印付けとして使用するインタフェースです。


   ワンポイントQuestionの解答

正解 B、E

Java2ラーニングブック −310-035 編−

本記事は@ITハイブックスシリーズ「Java2ラーニングブック −310-035 編−」(技術評論社)から、一部の内容を編集し転載したものです。本書の詳細は「@ITハイブックス」サイトでご覧いただけます。

 

Javaプログラミング・ワンポイントレクチャー INDEX



ホワイトペーパーTechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています