【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