基底クラスのstaticな領域は異なる派生クラス同士で共有されるのか?
と疑問に思い試してみた。答えは「共有される」
親クラス
class Parent { static int m_counter = 0; public static int countInternal() { m_counter++; return m_counter; } }
派生クラス1
class Sub1 extends Parent { public int count() { return countInternal(); } }
派生クラス2
class Sub2 extends Parent { public int count() { return countInternal(); } }
テスト用main
class Main { public static void main(String[] args) { System.out.println("Hello"); Sub1 sub1 = new Sub1(); Sub2 sub2 = new Sub2(); System.out.println("sub1:" + sub1.count()); System.out.println("sub1:" + sub1.count()); System.out.println("sub1:" + sub1.count()); System.out.println("sub2:" + sub2.count()); System.out.println("sub2:" + sub2.count()); System.out.println("sub2:" + sub2.count()); } }
実行結果
D:\MyProject\java\static>java Main Hello sub1:1 sub1:2 sub1:3 sub2:4 sub2:5 sub2:6
まだまだjavaをよく理解してないなオレ。