--/--/-- (--) スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 |


2011/06/08 (Wed) JAVA基礎 15日目(抽象クラスとインターフェイス)

prog15-1.jpg
prog15-3.jpg

実行結果
prog15-0.jpg

scannerクラスとBufferedReaderクラス

どちらもキーボードから入力した文字列を受け取るクラス。
実行速度はBufferedReaderクラスの方が早い。
機能はscannerクラスの方が豊富(メソッド数確認)。
また、scannerクラスの方がコードがシンプルになる

◆抽象クラス
◆抽象クラスの利用
◆instanceof演算子
◆インターフェイス
◆インターフェイスの実装
◆多重継承
◆インターフェイスの拡張
◆クラス階層の設計

抽象クラス

クラスの前に「abstract」というキーワードを付けると、そのクラスは抽象クラスとなる。

abstract class XXX

抽象クラスに対するオブジェクトは作成することができない。

XXX xxx = new XXX(); ←これができない

また、処理内容の定義されていないメソッド(=抽象メソッド)を含んでいる。
抽象メソッドにも「abstract」を付ける。

abstract void show();

抽象メソッドは無くても機能するが、その場合抽象クラスを使う意味が無くなる。

抽象クラスの利用

抽象クラスからサブクラスを拡張することができる。サブクラスでは抽象クラスから継承した抽象メソッドの内容をオーバーライドしなければならない

※抽象メソッドの内容をサブクラスで定義しないと、サブクラスでもオブジェクトを作ることができなくなる。

抽象クラス
{
show()
}
サブクラス extends 抽象クラス
{
show()
{
定義する
}
}

抽象クラスを使うと、そのサブクラスをまとめて扱いやすくすることができ、分かりやすいコードを書くことが可能となる。

instanceof演算子

変数が指すオブジェクトのクラスを調べることができる。特定のクラスのオブジェクトに特別な処理を与えるときなどに条件文を絡めて使用したりする。

xx instanceof XXX
if(xx instanceof XXX)

左辺の変数が右辺のクラスのオブジェクトを指しているかどうかを調べる。

インターフェイス

抽象クラスと同じような仕組みをインターフェイスを使ってあらわすことができる。

書き方
interface インターフェイス名
{
 型名 フィールド名 = 式;
 戻り値の型 メソッド名();
}

インターフェイスではフィールドは必ず初期化しなければならない。
インターフェイスはクラスと同じでフィールドとメソッドを持てるが、コンストラクタを書くことはできない。また、インターフェイスのメンバには修飾子(private、static)などをつけることができない。その代わり、フィールドには「public static final」(つまり定数)、メソッドには「abstract」(つまり抽象メソッド)という修飾子が自動的に付加(見えない)される。さらに、抽象クラス同様オブジェクトを作ることはできない。

※インターフェイスのフィールドは定数なので値を変更することができない。

インターフェイスの実装

クラスと組み合わせて使う=インターフェイスを実装する。

書き方
class クラス名 implements インターフェイス名
{
 ・・・
}

ただし、このクラスでオブジェクトを作成する場合は、インターフェイスのメソッドをすべてこのクラスで定義しなければならない。

サンプルコード

//のりものインターフェイス
//インターフェイスを宣言
interface iVehicle
{
//抽象メソッド
void show();
}

//車クラス
//インターフェイスを実装
class Car implements iVehicle
{
private int num;
private double gas;

public Car(int n, double g)
{
num = n;
gas = g;
System.out.println("ナンバー"+num+"、ガソリン量"+gas+"の車を作成。");
}
//抽象メソッドの処理を定義
public void show()
{
System.out.println("ナンバーは:"+num);
System.out.println("ガソリンは:"+gas);
}
}

//飛行機クラス
class Plane implements iVehicle
{
private int flight;

public Plane(int f)
{
flight = f;
System.out.println(flight+"便の飛行機を作成。");
}
//抽象メソッドの処理を定義
public void show()
{
System.out.println("飛行機の便:"+flight);
}
}

class Sample
{
public static void main(String[] args)
{
//インターフェイスの配列を準備
iVehicle[] ivc;
ivc = new iVehicle[2];

//1つ目のオブジェクトはCarクラス
ivc[0] = new Car(4545,19.4);

//2つ目のオブジェクトはPlaneクラス
ivc[1] = new Plane(365);

for(int i=0; i ivc[i].show();
}
}
}

多重継承

Javaではクラスを使った多重継承(2つ以上のスーパークラスを継承したサブクラスを作る)はできないが、インターフェイスを使うとそれが擬似的に可能になる。

2つ以上のインターフェイスの実装

書き方
class クラス名 implements インターフェイス名1,インターフェイス名2,・・・
{

}

インターフェイスの拡張

拡張されるほうをスーパーインターフェイス
拡張したほうをサブインターフェイス
という。

インターフェイスの場合複数のインターフェイスを拡張できる。

interface iMovable
{
}
interface iVehicle extends iMovable
{
}
class Car inplements iVehicle
{
}

クラス階層の設計

抽象クラスやインターフェイスは大規模なプログラムを作成する際に利用される。汎用性の高い抽象クラスやインターフェイスを設計すると、さまざまなプログラムに応用することができるようになる。

プログラミング | trackback(0) | comment(0) |


<<JAVA基礎16日目(例外処理) | TOP | JAVA 14日目 復習用(._.)φ>>

comment











管理人のみ閲覧OK


trackback

trackback_url
http://kononushi.blog46.fc2.com/tb.php/511-543b2345

| TOP |

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。