[英]Call an object's superclass methods outside the hierarchy
我正在開發一個游戲,這是我第一次添加多人游戲(帶有kryonet),它最初是作為單人游戲設計的,然后又添加了多人游戲。我想到了一種優雅的方式來使相同的代碼雙向工作。 該代碼有效,除了我的解決方案附帶的無限循環。
在我的游戲類中,當游戲為單人游戲時,我將foo變量實例化為Foo,將多人游戲時的foo變量實例化為SubFoo,例如下面的示例。SubFoo基本上重寫了Foo的方法,該方法負責改變世界的事件,進行所需的多人游戲調用,然后“繼續“ 方法 。
問題在於,當客戶端從服務器接收到數據包時,它必須以某種方式調用foo,從而使其跳過被覆蓋的方法,從而不會將更改發送回服務器,依此類推。
我嘗試在Foo類中添加一個根變量,希望如果我調用它,它將調用其類的方法,但沒有成功。 如果foo調用諸如foo.fooCaller().method();
類的方法,我也可以使其工作foo.fooCaller().method();
。
我應該提到我的服務器是一台主機。所以對於5個玩家,4個是客戶端,一個是主機。 如果有更好的方法,例如模式,我會很高興聽到它。
一個示例,其中Foo和SubFoo是我的World和WorldNetwork的簡化版本。
public class Foo { // as the main , singleplayer world
public Foo root;
public Foo() {
root = Foo.this;
}
public void method() {
System.out.println( "This is foo" );
}
}
// as the extension of the main world that manages the server/client calls
public class SubFoo extends Foo {
@Override
public void method() {
System.out.println( "this is super foo" );
super.method();
}
}
public static void main(String[] args) {
Foo foo = new SubFoo();
foo.root.method(); // make this skip the SubFoo method
foo.method(); // this should execut normally
}
由於您要調用Foo
類的方法,因此不應實例化SubFoo
對象。 您應該實例化一個Foo
對象。 另一方面,如果您需要SubFoo
對象上的特定功能,則應繼承該特定功能而不覆蓋它。
最后,您必須確定method
調用中將具有SubFoo
類的功能。 此功能不能隨上下文而更改,因為編譯器無法猜測您要執行的功能。
您可以使用基於函數參數的多態來實現。 例如:
class SubFoo{
//Inherit the method functionality from Foo
...
//Define new method with another signature to seperate its call
void method (Object arg);
}
最后,問題是您想要該方法做什么。
希望我能幫上忙!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.