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