2009-05-04 29 views
6
में एक क्लास के भीतर परिभाषित enums के बारे में एक सवाल

इस कोड को एक SCJP अभ्यास परीक्षा से लिया जाता है:जावा

3. public class Bridge { 
4. public enum Suits { 
5.  CLUBS(20), DIAMONDS(20), HEARTS(30), SPADES(30), 
6.  NOTRUMP(40) { public int getValue(int bid) { 
         return ((bid-1)*30)+40; } }; 
7.  Suits(int points) { this.points = points; } 
8.  private int points; 
9.  public int getValue(int bid) { return points * bid; } 
10. } 
11. public static void main(String[] args) { 
12.  System.out.println(Suits.NOTRUMP.getBidValue(3)); 
13.  System.out.println(Suits.SPADES + " " + Suits.SPADES.points); 
14.  System.out.println(Suits.values()); 
15. } 
16. } 

लाइन 8 points पर निजी के रूप में घोषित किया जाता है, और लाइन 13 पर यह क्या से इतना पहुँचा जा रहा है, मैं देख सकता हूं कि मेरा जवाब यह होगा कि संकलन विफल रहता है। लेकिन किताब में जवाब अन्यथा कहता है। क्या मुझे यहां कुछ याद आ रही है या क्या यह पुस्तक में एक टाइपो है?

उत्तर

11

एकल बाहरी वर्ग के भीतर सभी कोड अपरिभाषित है कि बाहरी वर्ग जो कुछ भी पहुंच का स्तर है में कुछ भी उपयोग कर सकते हैं।

3

पहला चेक बाहर लाइन 12

System.out.println(Suits.NOTRUMP.getBidValue(3)); 

getBidValue

+0

इसे लाइन 6 – Vasil

+0

@ वासिल पर परिभाषित किया गया है: लाइन 6 पर यह कहता है कि "getValue" नहीं "getBidValue" – newacct

+0

क्षमा करें, इसलिए सभी के बाद एक टाइपो है। इसे ध्यान में रखने के लिए +1। – Vasil

5

क्या stepancheg पर विस्तार करने के लिए कहा:

Java Language Specification section 6.6.1 "Determining Accessibility" से:

यदि किसी सदस्य या निर्माता निजी घोषित किया जाता है, तो पहुँच की अनुमति दी है यदि और केवल यदि यह शरीर के भीतर होता है शीर्ष स्तर की कक्षा जो सदस्य या निर्माता की घोषणा को संलग्न करती है।

अनिवार्य रूप से, private का मतलब इस वर्ग के लिए निजी नहीं है, इसका मतलब शीर्ष-स्तरीय वर्ग के लिए निजी है।

0

इसी प्रकार, एक आंतरिक वर्ग अपनी बाहरी कक्षा के निजी सदस्यों तक पहुंच सकता है।