मैं एक साधारण व्यवहार एआई बनाने पर एक ट्यूटोरियल ले रहा हूं। यह 'मस्तिष्क' वर्ग अमूर्त है और इसमें "चलने", "सफलता", "विफलता" के रूप में राज्य शामिल हैं। अब मेरी एआई इकाई में - Droid क्लास में मेरे पास Droid अप के मस्तिष्क को शुरू करने का एक तरीका है।क्या कक्षा वर्ग में एक अमूर्त वर्ग विधि का संदर्भ बनाना संभव है जो इसे विस्तारित नहीं करता है?
public void update(){
if(Routine.getState()==null){
Routine.start();
}
Routine.act(this, board);
}
अब यह जावा में संभव नहीं है क्योंकि यह एक गैर स्थैतिक विधि का स्थिर संदर्भ है। दिनचर्या सार वर्ग है कि मैं यहाँ करने के लिए संदर्भ के लिए कोशिश कर रहा हूँ इस प्रकार है:
public abstract class Routine {
public enum RoutineState{
Success,
Failure,
Running
}
protected RoutineState state;
protected Routine() { }
public void start(){
this.state = RoutineState.Running;
}
public abstract void reset();
public abstract void act(droid droid, board board);
public void succed(){
this.state = RoutineState.Success;
}
public void Fail(){
this.state = RoutineState.Failure;
}
public boolean isSuccess(){
return state.equals(RoutineState.Success);
}
public boolean isFailure(){
return state.equals(RoutineState.Failure);
}
public boolean isRunning(){
return state.equals(RoutineState.Running);
}
public RoutineState getState(){
return state;
}
}
मैं वर्गों है कि नियमित फैली से एक के लिए विधि को कॉपी करने की कोशिश की है, लेकिन है कि या तो काम नहीं करता है एक ही समस्या आती है। स्थिर आवश्यकता विशेष रूप से प्रारंभ() और कार्य() पर है जो इसमें शामिल है। और प्रारंभकर्ता हैं। मैं केवल विधि अद्यतन() जैसा ही कर सकता हूं, दिनचर्या में जहां मैं droid और बोर्ड शुरू करता हूं, यह काम करेगा - लेकिन मुझे यह समाधान उतना ही नहीं दिख रहा है जितना मैं चाहता हूं।
क्या कारखाने द्वारा ऐसी एक कक्षा शुरू करने और उदाहरण का उपयोग करने के लिए उपयोग संभव है? आप अंतिम नियमित दिनचर्या = RoutineFactory.createRoutine() घोषित कर सकते हैं; और वांछित के रूप में अपनी कॉल में इसका इस्तेमाल करें। आपको विधियों को चलाने के लिए वहां एक कार्यान्वयन की आवश्यकता होगी क्योंकि आपको इंस्टेंस विशिष्ट आइटम अपडेट करने की आवश्यकता है। आप विरासत का उपयोग क्यों नहीं कर सकते? –
आपको निश्चित रूप से उस पर एक विधि कॉल करने के लिए एक ऑब्जेक्ट उदाहरण की आवश्यकता है (सार या नहीं)। – Thilo