2012-02-26 17 views
7

फैली मैं एक जावा आधारित पाठ खेल के लिए एक चरित्र पीढ़ी तंत्र विकसित करने की प्रक्रिया में हूँ, लेकिन मैं एक मुद्दा में भाग लिया है और नहीं देख सकता मैं कहाँ गलत हो गया हो सकता है। मेरे पास एक "कैरेक्टर" वर्ग है, जो अमूर्त है और फिर एक और वर्ग, "एनपी कैरेक्टर" जिसका अर्थ है इसके शीर्ष पर बनाया गया है।जावा सार/मुद्दा

public abstract class Character { 
    public abstract void generateStats(); 
} 

public class NPCharacter extends Character { 
    public void generateStats() { 

    } 
} 

ग्रहण का कहना है कि "प्रकार NPCharacter अंतिम वर्ग चरित्र उपवर्ग नहीं कर सकते"। क्या कोई यहां त्रुटि देख सकता है?

अग्रिम धन्यवाद।

उत्तर

8

संकलक java.lang.Character के साथ अपने Character भ्रमित कर रहा है। बस एक पैकेज का उपयोग करें और सुनिश्चित करें कि आप आयात अपनेCharacter बनाते हैं।

package com.foo; 

public abstract class Character { 
    public abstract void generateStats(); 
} 

और

import com.foo.Character; 

public class NPCharacter extends Character { 
    public void generateStats() { 

    } 
} 
1

Characterjava.lang पैकेज में एक मानक वर्ग है, जो हर वर्ग में स्वतः आयात किया जाता है। अपनी कस्टम कक्षा के लिए दूसरा नाम चुनें।

0

आप आयात की जांच करें। ऐसा लगता है जैसे एनपी कैरेक्टर कैरेक्टर नामक एक और वर्ग का विस्तार करने की कोशिश करता है (शायद मानक लाइब्रेरी में से एक, जो वास्तव में अंतिम हो सकता है)।

बेहतर .Character

2

इसका पूरा नाम, यानी {पैकेज का नाम} के द्वारा अपने चरित्र वर्ग का उल्लेख समस्या यह है कि Characterjava.lang पैकेज में एक वर्ग है, और आप इसे बढ़ाया नहीं जा सकता, क्योंकि यह अंतिम है। आपको अपने Character कक्षा का नाम बदलना चाहिए और/या अपने आयात विवरणों की जांच करनी चाहिए: आपके पास नाम टकराव है।

2

संकलक कह रहा है कि आप java.lang.Character कक्षा का विस्तार नहीं कर सकते हैं, जो final कक्षा है जिसे उप-वर्गीकृत नहीं किया जा सकता है। (java.lang पैकेज में कक्षाएं परोक्ष सभी जावा स्रोत फ़ाइलों में आयात किया जाता है।)

हालांकि NPCharacter वर्ग Character सार वर्ग का विस्तार करने के लिए इच्छुक है, संकलक दोनों के बीच अंतर नहीं कर सकते।

आपको Character अमूर्त वर्ग के पूर्ण-योग्य क्लास नाम का उपयोग करना होगा, या यदि यह संभव नहीं है (क्योंकि यह किसी भी पैकेज से संबंधित नहीं है), तो आपके पास Character का नाम बदलने के अलावा कोई विकल्प नहीं होगा अमूर्त वर्ग

लेकिन बेहतर अभी तक, , कुछ है कि java.lang पैकेज में एक वर्ग के नाम के साथ विरोध नहीं करता अपने Character सार वर्ग का नाम बदलने के रूप में है कि अपने कोड को पढ़ने के लोगों के लिए भ्रम की स्थिति पैदा कर सकते हैं।

0

आपका कोड ठीक लग रहा है। क्या आप सुनिश्चित हैं कि आपका एनपी कैरेक्टर क्लास वास्तव में सही वर्ण वर्ग का विस्तार करने की कोशिश करता है, न कि एक अलग (एक अलग पैकेज से) जैसे उदा। java.lang.Character?