2012-08-28 56 views
0

所以我正在使用一个包装一些Web服务的单例类。服务的引用存储为私有静态只读成员。我想要一个非常类似的类,它使用相同的接口来封装不同的Web服务。如果我从第一类继承并用新的成员覆盖私有静态只读成员,那么所有事情都可以像我想的那样顺利进行?所有的继承函数(一些公有的,一些私有的,一些静态的)会使用新的引用吗?私有静态成员和继承

我问,因为我遇到过一些静态成员继承之前的怪癖。

回答

5

不,它不会工作。静态成员被附加到类型,而不是实例,并且不能被覆盖。如果在派生类中更改静态值(必须至少为protected而不是private),这将更改基类和派生类的所有实例的值。

这里需要注意的重要一点是静态字段被附加到基本类型。当从派生类派生的类使用与基类所使用的相同的静态实例时,您不会获得静态字段的新副本。

+0

我得到他们被附加到一个类型,但方法被附加到一个实例吗?如果一个实例是派生类,那么这些方法不应该与派生类静态成员一起使用吗?即使基类中有同名成员? – ForeverNoobie

+0

方法被附加到一个实例,是的,但如果方法与静态字段(大概是你的Web服务代理)进行交互,那么这些字段将在派生类和基类的所有实例之间共享(并且因此将展示静态类行为)。 –