2016-03-24 17 views
-1

Java dilinin en iyi uygulamalarını anlamaya çalışan bir C++ programcısıyım. Lütfen yanıtlarınızı uygun şekilde uyarlayın :)Üye, sınıf özel bir sınıf örneği olduğunda başka bir sınıfın genel üyesini nasıl görebilir

Bir örnek çalıştım ve gözlemlediğim davranışların neden ve nasıl mümkün olduğunu anlamıyorum. Test yana

//HelloWorld.java 

public class HelloWorld{ 
    public static void main(String []args){ 
     Newfile nf = new Newfile(); 
     nf.setTest(5); 
     System.out.println(Integer.toString(nf.test.i)); 
     System.out.println("Hello World"); 
    } 
} 

//Newfile.java 

class TEST { 
    public int i; 
} 

public class Newfile{  
    public TEST test = new TEST(); 
    public int setTest(int i) { 
     return test.i = i; 
    } 
} 

// THIS WORKED 
/* 
    5 
    Hello World 
*/ 

(iyi ben tahmin) daha sonra nasıl HelloWorld da TEST (yani i üyesi) içeriği işleyebilir, özel mi? Ben davranmaya yukarıdaki deney beklerdim ve aldığım gibi şimdi davranırlar Newfile özel bir iç sınıfa TEST taşındı Şimdi

garip kısmı

:

i in Newfile.TEST is defined in an inaccessible class or interface 
+0

'Test ', tamamen özel değil, paket özeldir. Bu, aynı paketteki içeriğin erişebileceği anlamına gelir. (Bir pakette olduklarını sanıyorum) – SomeJavaGuy

+0

Downvoter, lütfen açıklamaya dikkat et? Downvoting, o kadar rastgele hale geldi ki, değerini kaybetti. Soru, açık, özlü, ödev değil (belli ki). Kolay veya açık bir soru bulduğunuzda, bu kötü bir şey anlamına gelmez. – Kam

+0

downvoter değil, ama tekrar arama çabası olmadığını söyleyebilirsin. Aslında durumun gerçek olup olmadığını araştırmadan özel olduğunu varsayıyorsun. – SomeJavaGuy

cevap

2

Since TEST is private (well I presume)

Hayır. Aslında package-private. Java Tutorials itibaren

:

If a class has no modifier (the default, also known as package-private), it is visible only within its own package


DÜZENLEME

Hem senin HelloWorld ve TEST sınıfları sizin durumunuzda aynı paketin üyeleri (sahip görünmüyor çünkü vardır paketi açıkça belirtmişler, isimsiz paketin üyeleridir). Bu nedenle, TEST paket özel olsa bile, HelloWorld'dan erişilebilir. TESTNewfile bir private iç sınıf yaparak

Now the strange part, when I moved TEST to a private inner class of Newfile it now behave as I would've expected the above experiment to behave and I got:

i in Newfile.TEST is defined in an inaccessible class or interface 

doğal, bu durumda artık erişilebilir HelloWorld geliyor, sadece Newfile sınıfın kendisi üyelerine erişilebilir hale, yani.

+0

Özel olarak bunu özel olarak atayamıyorum, neden böyle? – Kam

+0

Sınıflar _ (** EDIT **: iç sınıflar hariç) _ Java'da "public" olarak açıkça belirtilebilir veya hiç erişim belirticisine sahip olamaz (bu nedenle paket özel). Bir soru: Eğer dersler için bir özel dedektör var mı (var değil), tam olarak ne anlama gelmesini beklerdin? – TerraPass

+1

@TerraPass yalnızca kısmen başlangıçta, iç sınıflar özel olabilir. TEST'i özel olarak (iç sınıf olarak değil) bildirdiğimde – SomeJavaGuy

İlgili konular