たとえば次のようなコードを考えます。
public class Test2 {
public static void main(String[] args){
String str = "Hello";
System.out.println(str);
}
}
単に「Hello」と表示するだけのプログラムです。
このとき、このTest2クラスのなかのメインメソッドの「String str」はフィールドと呼ばれます。
フィールドの書式は次のようになっています。
[修飾子] データ型 変数名;
フィールドは継承されない
たとえば、あるクラスを継承するとします。public class Test extends Hello{
public static void main(String args[]){
sayHello();
}
}
class Hello{
public static void sayHello(){
String str = "Hello";
System.out.println(str);
}
}
strには親クラス(Helloクラス)でHelloが代入されているので、子クラス(Testクラス)でこれを実行すると「Hello」と表示されます。
ですが、次のようにするとエラーになります。
public class Test extends Hello{
public static void main(String args[]){
sayHello(); //こっちは大丈夫。
System.out.println(str); //この str はエラーになります。
}
}
class Hello{
public static void sayHello(){
String str = "Hello";
System.out.println(str);
}
}
つまり、クラスを継承するとメソッドなどが使えるようになりますし、メソッドのオーバーロードやオーバーライドも可能になりますが、フィールドは子クラスに継承されないということです。