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。) } }