package com.xyh.test.protect.a1;
public class father {
int a;
public int b;//所有类可以访问
protected int c;//包中的类及其子类可以访问
private int d;//包中的类可以访问
protected father(int d){
this.d = d;
System.out.println(d);
}
father(){ }
public father(int a,int d){ }
int geta(){ return this.a; }
}
package com.xyh.test.protect.a1;
class Ca {
int a = new father().a;
int b = new father().b;
int c = new father().c;
int d = new father(1).a;
int e = new father(1).b;
int f = new father(1).c;
int geta(){
return new father().geta();
}
}
/*
* Ca跟father在同一个包中,可以访问father的private以外的
* 所有属性、方法;
*/
/*
* class前的修饰符只能为public或默认(即无修饰符)
* 变量和方法前的修饰符可以是public protected 默认 private
*/
package com.xyh.test.protect.a2;
import com.xyh.test.protect.a1.father;
class son1 extends father {
int b = super.b;
int c = super.c;
son1(int i) {
super(i);
}
void show(){
c = 0;//非静态方法中可以直接访问类的变量
int f = super.b;
int g = this.c;
//int h = new father(4).b; //提示The constructor father(int) is not visible int h = new father(1,4).b;
//father(int a,int d)为public修饰
}
public static void main(){
// int f = new father(4).b;//提示The constructor father(int) is not visible int f= new father(1,4).b;
//father(int a,int d)为public修饰
//new father(1,4)访问不到c
System.out.print(f);
// c = 0; //Cannot make a static reference to the non-static field c
}
}
/*
* 子类的构造函数中必须要执行父类的构造函数。如果不写super(i);
* 默认的会执行super(),father中没有定义这个构造函数就会报错。
*/
/*
* father类被继承,其构造函数的权限至少为protected
*/
/*
* this和super不能用在static修饰的方法中,在static方法中不能
* 直接访问类的变量,需要通过类实例访问
*/
/*
* father中protected修饰的属性,在子类中可以用super.c访问。
* 通过类的实例不能访问
*/
/*
* 要访问其他包中的类,其他包中的类前必须是public修饰
*/