ハイディング(hiding)というプログラミング用語をご存知ですか?
なんらかの定義が別の定義で隠されることを言います。
Javaの場合、よくあるのはフィールドですね。
親のクラスで定義されたフィールドと同じ名前のフィールドを
サブクラスのほうでも定義することができます。
public class Hoge {
public int field = 1;
}
public class Piyo extends Hoge{
public int field = 2;
public void hoge() {
System.out.println(field);
}
}
この場合、fieldはPiyoクラスでの定義となり、2が表示されます。
このほか、ジェネリクスの型パラメータのハイディングというのもあります。
public class Test<T> {
/** メソッドローカルのパラメータ型でハイディング */
public <T> void hoge(T t) {
}
/** 内部クラスのパラメータ型でハイディング */
class Inner<T> {
}
}
メソッドローカルの型パラメータや、内部クラスでの型パラメータでハイディングが生じます。
これらハイディングは混乱の元となりますので、避けることが望ましいでしょう。
投稿日時 : 2007年8月9日 20:30