أعضاء محميون في فئة خارقة لا يمكن الوصول إليها بواسطة فئة فرعية غير مباشرة في جافا

StackOverflow https://stackoverflow.com/questions/2820630

سؤال

لماذا في Java ، لا يمكن الوصول إلى الأعضاء المحميين من فئة فائقة من خلال فئة فرعية غير مباشرة في حزمة مختلفة؟ أعلم أن الفئة الفرعية المباشرة في حزمة مختلفة يمكنها الوصول إلى الأعضاء المحميين في الفئة الفائقة. اعتقدت أن أي فئة فرعية يمكنها الوصول إلى أعضائها المحميين الموروثة.

تعديل

آسف خطأ مبتدئ ، يمكن للفئات الفرعية الوصول إلى الأعضاء المحميين غير المباشرة.

هل كانت مفيدة؟

المحلول

ربما كنت مرتبكًا قليلاً.

إليكم العرض التجريبي السريع الخاص بي ويظهر فئة فرعية غير مباشرة تصل إلى سمة محمية:

// A.java
package a;
public class A {
    protected int a;
}

// B.java 
package b;   //<-- intermediate subclass
import a.A;
public class B extends A {
}

// C.java
package c; //<-- different package 
import b.B;
public class C extends B  { // <-- C is an indirect sub class of A 
    void testIt(){
        a++;
        System.out.println( this.a );//<-- Inherited from class A
    }
    public static void main( String [] args ) {
        C c = new C();
        c.testIt();
    }
}

يطبع 1

كما ترى ، السمة a يمكن الوصول إليه من الفئة الفرعية C.

إذا أظهرت لنا الرمز الذي تحاوله ، فيمكننا معرفة مكان وجودك.

نصائح أخرى

ربما المشكلة هي أنه يحاول الوصول إلى الحقل المحمي للمثال الآخر ولكن ليس له. مثل :

package a;
public class A{
    protected int a;
}

package b;
public class B extends A{

}

package c;
public class C extends B{
    public void accessField(){
        A ancient = new A();
        ancient.a = 2;  //That wouldn't work.

        a = 2;   //That works.
    }


}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top