package ch05_18_AB;
public class A {
    private int a1;
    private int sum1 (int m,int n) {
       return m + n;
    }
    public int a2;  
    public int sum2 (int m,int n) {
        return m + n;
    }
    int a3;
    int sum3(int m,int n) {
        return m+ n;
    }
    protected int a4;
    protected int sum4 (int m,int n) {
        return m+ n;
    }
    public  int sum (int m,int n) {  //方法sum是公有方法，可以在本类或其他类中访问
       int x=this.sum1(m,n)+this.a1;  
       int y=this.sum2(m,n)+this.a2;  
       int z=this.sum3(m,n)+this.a3;  
       return x+y+z;
    }
    public  A (int a,int b,int c,int d) {//类A的构造方法
       this.a1=a;
       this.a2=b;
       this.a3=c;
       this.a4=d;
    }
}
package ch05_18_AB;
public  class B{
    public static void main (String [] args){
        A ca = new A (10,20,30,40);
        ca.a1= 18; // 编译错误，访问不到私有的a1
        ca.a2= 18; //正确，无论是否在同一包下的类，都可以利用对象访问公共的a2
        ca.a3= 18; //正确，在同一包下的其他类中，利用对象可以友好的a3
        ca.a4= 18; //正确，同包下的非子类允许通过对象访问保护成员
    }
}

package ch05_18_C;
import ch05_18_AB.A;
public  class C{
    public static void main (String [] args){
        A ca = new A (10,20,30);
        ca.a1= 18; // 编译错误，访问不到私有的a1
        ca.a2= 18; //正确，无论是否在同一包下的类，都可以利用对象访问公共的a2
        ca.a3= 18; //编译错误，不在同一包下不能访问 a3
        ca.a4= 18; //编译错误，不同包下的非子类不允许访问保护成员
    }
}
