Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > Java基本 > クラス −2.クラス
更新日:2005/7/25
クラス−2.クラス
このページでは、クラスの宣言方法とクラスの継承について説明します。
クラス宣言
以下の枠内がクラスを宣言する際のフォーマットです。Javaではクラス宣言時、修飾子を付けることによりクラスに様々な役割を持たせることができます
class クラス名 { クラス本体 }
【クラス宣言時に付与できる修飾子】※修飾子は上から宣言する順に並んでいます。
修飾子
説明
public
他のどのクラスからも宣言されたクラスを使用できることを表します。publicがない場合は同じパッケージ中のクラスからしか使用できないことを表します。
abstract
abstractは宣言されたクラスからインスタンスを生成できないことを表します。詳細はabstractを参照してください。
final
finalは宣言されたクラスのサブクラスを作れないことを表します。詳細はfinalを参照してください。
class クラス名
クラス宣言における必須要素です。クラスの宣言とそのクラス名を表します。
extends スーパークラス名
スーパークラスのサブクラスとしてクラスを宣言することを表します。extendsの説明は次項で詳しく行います。
implements インターフェース名
宣言されたインターフェースをクラスが実装することを表します。詳細はインタフェースの実装を参照してください。
【例1】 クラスの宣言例です。このファイルをコンパイルして実行すると画面上に「Hello World!!」と表示されます。
//public修飾子を付与しているため、
//すべてのクラスからこのクラスを使用できます。
//final修飾子を付与しているため、
//このクラスのサブクラスを作ることはできません。

public final class ExClass1 {
public static void main(String[] args) {
System.out.println("Hello World!!");
}
}
クラスの継承
ここではクラスの利点の一つであるクラスの継承について説明します。クラスの継承とはあるクラス(スーパークラス)の機能を他のクラス(サブクラス)からでも使用できるということです。オブジェクトの中には非常に似た機能を持つものが多数あります。すべてのオブジェクトが1つのクラスから生成できればいいですが、中にはクラスを新たに生成し、そこからオブジェクトを生成したほうがよい場合もあります。コンピュータの例で言いますと、デスクトップコンピュータ、ノートブックコンピュータを1つのコンピュータクラスから生成するよりデスクトップコンピュータクラス、ノートブックコンピュータクラスを作成し、そこからデスクトップコンピュータ、ノートブックコンピュータを生成した方が効率が良くなります。
クラスの継承
新たなクラスを作成する際、一からクラスを作成するのではなく元々あるクラスの型に新しい機能のみを付与した方がいい場合があります。その時、クラスの継承を使用します。クラスの継承は以下の枠内のフォーマットで行われます。継承される側のクラスをスーパークラス、継承する側のクラスをサブクラスと言います。1つのサブクラスが継承できるスーパークラスは1つまでです。
class サブクラス名 extends スーパークラス名 { クラス本体 }
クラスの継承について注意点が4つあります。
1. スーパークラスでprivate修飾子を付与して宣言されているメンバ変数・メソッドはサブクラスから参照することはできません。
2. スーパークラスでアクセスレベル無指定(デフォルト)で宣言されているメンバ変数・メソッドはサブクラスがスーパークラスと同一パッケージである限りサブクラスから参照することができます。パッケージの詳細についてはパッケージを参照してください。
3. final修飾子が付与されたスーパークラスを継承することはできません。
4. スーパークラスで宣言されたコンストラクタはサブクラスに継承されません。サブクラス側でコンストラクタを宣言しなおすか、サブクラスのコンストラクタ内でスーパークラスのコンストラクタを呼び出す必要があります。
【例2】クラスの継承を使用した例です。
class ExClass2 {
String class2String;
//スーパークラスのコンストラクタ

ExClass2(String s) {
class2String = s;
}
//継承されるclass2Method
void class2Method() {
System.out.println(class2String);
}
}

public class subExClass2 extends ExClass2 { //(1)
subExClass2(String s) { //(3)
super(s);
}

public static void main(String[] args) {
subExClass2 subObject = new subExClass2(args[0]); //(2)
subObject.class2Method(); //(4)
}
}
【解説2】
(1). ExClass2をスーパークラスに持つサブクラスsubExClass2を宣言します。
(2). サブクラスsubExClass2のオブジェクトsubObjectを宣言・生成します。
(3). オブジェクト生成時、コンストラクタが実行されます。コンストラクタは継承できないため、サブクラス内でコンストラクタを宣言し、そこからスーパークラスのコンストラクタを呼び出します。superの詳細についてはこちらを参照してください。
(4). メソッドclass2Methodを呼び出します。継承されているためクラスsubExClass2内で宣言しなくても呼び出しが可能です。
【実行結果2】
D:\JAVA>javac subExClass2.java

D:\JAVA>java subExClass2 aiueo
aiueo

D:\JAVA>



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道