2014-04-02 23 views
5

Java Aşağıdaki kodKorumalı üyesi farkı

public class First { 
    protected int z; 

    First() 
    { 
     System.out.append("First const"); 
    } 

} 

class Second extends First { 

    private int b; 
    protected int a; 

} 

class Test { 
    /** 
    * @param args the command line arguments 
    */ 
    int a=0; 

    public static void main(String[] args) { 
     // TODO code application logic here 
     First t=new Second(); 
     t.z=10; work fine 
     First x=new First(); 
     x.z=1; // works fine 
    } 
} 

yüzden

C#

class A 
{ 
    protected int x = 123; 
} 

class B : A 
{ 
    static void Main() 
    { 
     A a = new A(); 
     B b = new B(); 

     // Error CS1540, because x can only be accessed by 
     // classes derived from A. 
     // a.x = 10; 

     // OK, because this class derives from A. 
     b.x = 10; 
    } 
} 

Yani base sınıfın nesnesi oluşturarak z erişebilir var Temel sınıf nesnesi üzerinden a'a erişemiyorum. Ben bir OOP bakış açısından Java ve C# benzer buldum, protected üyeleri için her iki dil arasında bir fark var mı?

with reference to this doc

+1

Java'da 'korumalı', tanımlanmış sınıf, türetilmiş sınıf veya aynı paket/gruptaki bir sınıf tarafından erişilebilen C# içerisindeki 'korumalı iç' öğesine eşdeğerdir. –

cevap

1

fark Java korumalı üyesi aynı paket ulaşılabilir olmasıdır. C++ 'da java'da paket seviyesi görünürlüğü için eşdeğerlik yoktur.

+0

@tibtof, c3 ve java –

+0

C# 'de korunanların farklı olduğunu doğrulamak istedim: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and- structs/access-modifiers – Adam

+0

Detaylı açıklama: https://www.codeproject.com/Articles/1078878/Differences-in-Java-and-Csharp-protected – user1068352

1

Tibtof'un cevabını kabul ediyorum. Sahip olduğum tek açıklama, Java örneğinizin C# örneğiyle aynı olmamasıdır.

Test kodunuzu ikinci sınıfa getirerek, Test sınıfının "public static void main ..." yöntemini sınayarak ve Second public (Genel) özelliğini kullanarak iki kodu benzer yapabilirsiniz.

Sonuç, sonuçlarınızla aynıdır: Java'da çalışır, ancak C# içinde değil.