我对Java中protected的认识。

    技术2022-05-11  72

      package mypack1;

    public class ClassA {               public int var1;               protected int var2;               int var3;               private int var4;               protected void method() {                                            System.out.println("protected method in class a");               } }   package mypack2; import mypack1.ClassA; class ClassC extends mypack1.ClassA {              // var2 = 3;               //不OK,               void method3(){               var2 = 4;               //执行此处时一定是存在一个ClassC的实例了,所以OK.               this.var2 = 5;       //此处的var2与上一行的var2是同一个变量.               }                           public static void main(String[] args) {                             ClassC c = new ClassC(); //创建了一个ClassC的实例.                             c.method();       //此处的method()方法是从基类继承来的,这个继承的protected方法在派生类内部是可以访问的。                             c.var2 = 3;         //此处的var2是从基类继承来的.                                                         ClassA a =new ClassA();                               //a.method();     //不能通过编译。此处的method()方法是基类的对象的protected方法,并不是派生类的对象的方法,在派生类内部无法直接访问基类对象的protected成员。(如果ClassC ClassA在同一个包中,则OK。)                             //a.var2 = 3;       //不能通过编译。原因同上,此处的成员变量是基类的对象的,而不是派生类的对象的,所以在派生类中无法访问。 (如果ClassC ClassA在同一个包中,则OK。)                 } }

    最新回复(0)