日々常々

ふつうのプログラマがあたりまえにしたいこと。

オーバーライドとstaticメソッド

こんなコードがあって。

public class Hoge {
	public static void main(String[] args) {
		C c = new C();
		c.method();
	}
}

class A {
	static void method1() {
		System.out.println("A method1");
	}

	void method2() {
		System.out.println("A method2");
	}
}

class B extends A {
	void method() {
		method1();
		method2();
	}
}

class C extends B {
	static void method1() {
		System.out.println("C method1");
	}

	void method2() {
		System.out.println("C method2");
	}
}

Hogeのmainを実行したらどうなるか。

わかるひとはすぐわかるんだけども。


こう。

A method1
C method2

method1をオーバーライドした気になってるかもしれないけど、staticメソッドは出来ないんだ。めんどくさいから、staticメソッドは継承したら使わないのがいいんじゃないかな。