public class Father {
private String name="aaa";
protected int i=5;
//如果将这里的成员变量、成员方法修饰static,那么在子类中,就可以使用父类的引用调用static的成员了。
public void test1(){
System.out.println("name="+name);
}
protected void test2(){
System.out.println("2="+test3());
}
private int test3(){
return 2;
}
}
===============================================================
package b;
import org.junit.Test;
import a.Father;
public class Son extends Father {
public static void main(String[] args){
Father f=new Father();
//int a = f.i; //i是protected
f.test1();
//f.test2(); //test2()是protected
//f.test3(); //test3()是private
f=new Son();
//int a = f.i;
f.test1();
//f.test2();
Son s=new Son();
int b = s.i;
s.test1();
s.test2(); //这里不报错
//s.test3();//private的当然不能访问
//main()是静态方法,不能调用this、super
}
@Test
public void test(){
Father f=new Father();
//int a = f.i;
f.test1();
//f.test2(); //test2()是protected
//只能使用Child(子类)本身来调用
int b = this.i;
int c = super.i;
this.test2();
super.test2();
Son s=new Son();
int d = s.i;
s.test1(); //这里不报错
s.test2();
//s.test3(); //private的当然不能访问
}
==========================================================
被protected所修饰的属性和方法可以被该类的子类所访问的意思是说可以在该类的子类内部所访问,所以在和Farther类的不同包中,尽管是new Farther(),但是f引用依然不能访问Farther类中有protected修饰的成员变量和成员方法,
方法一:只有是new Son(),而且使用s(而不是使用f)引用,才可以访问不同包的Farther中protected修饰的成员变量和成员方法。
方法二:在Son类的成员方法中,使用this、super来调用不同包的Farther中protected修饰的成员变量和成员方法。