对静态变量的操作存在继承时还是存在一些模糊,做了个简单的测试:
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 中如果继承的父类中存在静态变量,多个子类操作的还是同一个静态变量地址,因此子类的操作是要相互覆盖的。
如果子类重写了父类的方法和静态变量则专属子类了,其它子类的操作也就不会相互覆盖了。