/*
* 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{
}
ACAC 修饰访问控制符
猜你喜欢
转载自blog.csdn.net/qq_44707513/article/details/114369562
今日推荐
周排行