我在 Android 的上下文中这样做,但我的问题是理解 Java。我对两者都有点陌生,所以希望我在这里使用正确的术语。
我有许多子类从我的超类(Android Activity 扩展)继承/扩展,称为 SuperActivity。我还定义了另一种名为 Network 的类类型(它是一个 Android 服务)。在我的超类中,我定义了一个匿名内部类,它实现了一个名为 ServiceConnection 的(Android)接口。该接口指定(因此我正在定义)将由 Android 系统调用的方法。我必须将我的那个匿名的、实现 ServiceConnection 的内部类的实例传递给一个名为 bindService() 的方法,以便以后可以调用该匿名内部类中的方法。
正如我所提到的,我正在继承定义匿名内部类的超类。该匿名内部类中的方法必须在子类实例中设置实例变量;我需要设置的实例变量在这里称为 mNetwork。
在超类中:
public class SuperActivity extends Activity {
protected Network mNetwork;
protected ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mNetwork = ((Network.NetworkBinder)service).getService();
}
}
void bindNetwork() {
bindService( new Intent(this, Network.class), mConnection, Context.BIND_AUTO_CREATE);
}
}
所以我创建了我的子类并调用它的 bindNetwork() 方法。显然,分配给 mConnection 的匿名内部类不是我的子类的实例成员,因为在调用匿名内部类中定义的 OnServiceConnected() 方法后,名为 mNetwork 的子类的实例成员为空。
此外,如果我使用包含匿名内部类的 mConnection 变量并在其上调用 getClass().getName() 或对其调用 toString(),则它显示自己是我的超类的内部类,而不是子类的内部类。
显然我不了解Java继承。我想要一些子类,每个子类都有自己的 mNetwork 变量,由匿名内部类中的方法设置。我不想将匿名内部类的定义切入每个子类。一定有办法的。我究竟做错了什么?