クラスの継承
スーパークラスのクラスメンバ
スーパークラスの staticなメンバは、サブクラスからアクセス可能です。
static
目次
1. スーパークラスのクラスメンバ
スーパークラスのクラスメンバ(staticメンバ)について、
以下の2点を押さえておきましょう。
どこからでも使えるけど。
オーバライドは禁止。
2. サンプル
サンプルコードで確認してみましょう。
Animal_01クラスの
printGroupメソッドを使うぞ。
printGroup はクラスメソッドだ。
//Animal_01.java
public class Animal_01{
protected static String = "生き物です。";
protected String name;
public Animal_01(){
this.name = "no_name";
}
public Animal_01(String name){
this.name = name;
}
public static void printGroup(){
System.out.println(group);
}
public void printName(){
System.out.println(name + "だぞ! ガオー!");
}
}
//Dog_02.java
public class Dog_02 extends Animal_01{
public Dog_02(){
super();
}
public Dog_02(String name){
super(name);
}
}
//Cat_02.java
public class Cat_02 extends Animal_01{
public Cat_02(){
super();
}
public Cat_02(String name){
super(name);
}
}
よし、
いろいろなところから
printGroup()を呼んでみるぞ。
//Driver_st01.java
public class Driver_st01{
public static void main(String[] args){
Animal_01 animal01 = new Animal_01("アニマル浜口");
Dog_02 dog02 = new Dog_02("白いお父さん");
Cat_02 cat02 = new Cat_02("ニャース");
//それぞれのクラスで printGroupメソッドを実行
Animal_01.printGroup();
Dog_02.printGroup();
Cat_02.printGroup();
//それぞれのインスタンスで printGroupメソッドを実行
animal01.printGroup();
dog02.printGroup();
cat02.printGroup();
}
}
Animal_01.java、
Dog_02.java、
Cat_02.java、
Driver_st01.java、を
wsフォルダに保存して実行します。
わ!
全部同じ結果だ!
コマンドライン
>cd ws
ws>javac -encoding UTF-8 Driver_st01.java
ws>java Driver_st01
生き物です。
生き物です。
生き物です。
生き物です。
生き物です。
生き物です。
スーパークラスのクラスメンバは、どこから参照しても同一です。
スーパークラスのクラスメンバは、アクセス修飾子が protected以上であれば
サブクラスからアクセスすることが可能です。
クラスメンバ(staticなメンバ)は、インスタンスからアクセスすることができますので、
サブクラスのインスタンスからもアクセスできます。
サブクラスを作っても、
インスタンスを作っても、
staticなメンバは一つだけだ。
継承とは切り離して
考えて良さそうね。
お疲れ様です。