2011-11-06 20 views

उत्तर

8

नहीं, आप नहीं कर सकते, क्योंकि यह encapsulation का उल्लंघन करता है। आप अपने माता-पिता के व्यवहार को छोड़ रहे हैं, इसलिए सी को बी का विस्तार करना है, लेकिन आप इसे छोड़ रहे हैं।

कृपया जॉन स्कीट्स को उसी प्रश्न के उत्कृष्ट उत्तर Why is super.super.method(); not allowed in Java? देखें।

कृपया ध्यान दें कि आप प्रतिबिंब द्वारा क्षेत्र तक पहुंच सकते हैं, लेकिन आप ऐसा नहीं करना चाहते हैं।

3

नहीं। और मैं इसे छोड़ दूंगा, लेकिन स्पष्ट रूप से एसओ चाहता है कि मैं 30 अक्षरों के लिए आगे बढ़ूं।

+11

आप कारण है कि यह संभव नहीं है पता करने के लिए हो, तो है कि कुछ – arsenbonbon

17

नहीं, लेकिन आप एक से अधिक विशेषता विरासत के साथ कुछ ऐसा ही कर सकते हैं:

trait A { def foo = "from A" } 

class B extends A { override def foo = "from B" } 

class C extends B with A { 
    val b = foo   // "from B" 
    val a = super[A].foo // "from A" 
} 
+0

30 वर्ण को भरने के लिए :) हो सकता है और क्यों @Matthew ने अपने जवाब में कहा कि यह encapsulation का उल्लंघन क्यों नहीं करता है? – MaxNevermind

+1

इस उदाहरण में, वर्ग 'सी' स्पष्ट रूप से 'ए' बढ़ाता है, इसलिए इसे सीधे पहुंच 'ए' का व्यवहार मिलता है। ईमानदार होने के लिए, यह उदाहरण अजीब दिखता है, और मुझे यकीन नहीं है कि यह अच्छी शैली है। –