閱讀640 返回首頁    go 阿裏雲 go 技術社區[雲棲]


【JAVA】類繼承對父類靜態變量的操作

對靜態變量的操作存在繼承時還是有一些模煳,做了個簡單的測試:

class Test
{
	private String mName;

	public Test(String name) {
		setName(name);
	}

	public void setName(String name) {
		mName = name;
	}

	public String getName() {
		System.out.println(mName);
		return mName;
	}
}

class A {
	protected static String TAG = "A";
	protected static Test mTest;

	public A() {
		
	}

	public Test getTest() {
		return mTest;
	}
}

class B extends A
{
	protected static String TAG = "B";

	public B() {
		mTest = new Test(TAG);
	}
}

class C extends A
{
	protected static String TAG = "C";

	public C() {
		mTest = new Test(TAG);
	}
}

public class Demo
{
	public static void main(String[] args) {
		B b = new B();
		C c = new C();
		b.getTest().getName(); // print C
		c.getTest().getName(); // print C
    }
}


JAVA 中如果繼承的父類中存在靜態變量,多個子類操作的還是同一個靜態變量地址,因此子類的操作是要相互覆蓋的。

如果子類重寫了父類的方法和靜態變量則專屬子類了,其它子類的操作也就不會相互覆蓋了。




最後更新:2017-04-03 12:55:50

  上一篇:go Interop type 'Microsoft.Office.Interop.Word.ApplicationClass' cannot be embedded. Use the applicable
  下一篇:go Flume-ng出現HDFS IO error,Callable timed out異常