ACAC 修饰访问控制符

/*
 *  1、java中的修饰符:
 *
 *       修饰符是用来定义类,方法,变量,通常放在语句最前边
 *
 *       访问控制修饰符: public private protected default(默认)
 *
 *       非访问修饰符:
 * */

/*本章主要测试,public private 和 protected访问修饰符,内部类
*
*   private :修饰方法,变量,只能被所属类访问(所属类访问也是通过对象的get方法进行访问)
*            其他类访问可以通过set get方法进行变量的修改
*           作用:隐藏类的实现细节和保护数据
*
*   public : 声明的变量,方法,构造方法,接口可以被其他任意类访问
*             如果相互访问的public分布在不同的包中,则需要导入相应public所在的包
*
*   protected:同一包:包内可见,并且对子类可见
*              不同包:在子类中,子类可以访问从父类中继承的protected方法,但不能访问父类中实例的protected方法
*
*   default(默认):同一包内可见,其他包中不可见
*
*         问:为什么不能修饰类和接口呢?
*         答:1、类的默认修饰符是public 和 default(什么也不写)
*             原因:对于外部类(顶级类)来说,他的作用域就是同包和其他任意位置(就是不同包),因此只需要两种
*             访问权限,包访问权限(default 默认就行)和公开访问权限(public)
*
*             2、接口默认是public的,接口就是进行实现的,所以不能是私有和受保护的
*                不能在接口前写public,因为他本身就是public :
*                  Class 'aa' is public, should be declared in a file named 'aa.java'
*               接口中常量:public static final 可以省略
*                    方法:public abstract 可以省略
*
*
*         为什么protected不能修饰类呢?
*           因为protected的访问控制,是同包以及其他包的他的子类,对于同包则有default可以,对于其他包的子类
*           public可以做到,所以没有必要使用,因为还得写protected,直接默认,或者public就可以了。
*         为什么这样呢,从运行的角度理解?
*           因为一个java项目是不会在一个class中完成的,需要多次调用其他class,定义为私有或受保护的就无法调用
*           对于一个被private修饰的类,其他类无法调用它,那么它作为一个单独的文件就没什么用了,类加载找不到他,
*           因为它对外不可见。同时也失去了类的意义,所以修饰外部类,用的是public和默认修饰符
*
*       */
public class XiuShiFu {

    private int i = 12;
    int a = 23;

    public static void main(String[] args) {

        XiuShiFu test = new XiuShiFu();
        int b = 12 + test.getI();
        System.out.println("b = " + b);
        System.out.println(test.getI());

        //测试子类继承父类,父类没有实现Cloneable接口,子类调用clone方法会不会出错?
        Test11 son = new Test11();
        //son.clone();
        /*
        * 结果:子类调用不会出错,clone方法有个异常要抛出,要处理一下
        * 测试结果:在子类中clone方法是可见的,但要抛出或者try catch一个异常
        *          错误:需要处理这个异常,Unhandled exception: java.lang.CloneNotSupportedException
        *
        *          但是在主方法这个类中,是不可见的,是错误的
        *          错误:'clone()' has protected access in 'java.lang.Object'
        *
        * */
    }
    public int getI() {
        return i;
    }
    public void setI(int i) {
        this.i = i;
    }
}

 class Test {
    public int c = 13;
    public static void aa() {
        XiuShiFu dd = new XiuShiFu();
        int d = 1 + dd.getI();
    }
}

class Test11  extends Test{

    public Test11() {
    }

    public void test11(){
        Test11 bb = new Test11();
        try {
            bb.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }

}
interface aa{

}

猜你喜欢

转载自blog.csdn.net/qq_44707513/article/details/114369562