权限修饰符
权限访问能力public>protected>default>private
具体如下表所示:
不同包的子类:就是不同的包名,有一个类继承了另一个包中的类,可以调用public、protected修饰的成员或者方法。
修饰符总结
1、default
在中文中是默认的意思,在java中能用到default的只有两个地方
(1)switch语句中使用default
使用方法:当case里的值与switch里的值没有匹配时,执行default的方法
(2)定义接口时使用default修饰具体方法
使用方法:default修饰的目的是让接口可以有具体的方法,让接口内部包含一些默认的实现方法
注:如果一个类、类属变量及方法没有任何修饰符,其访问权限为default(默认访问权限)
表格中的default都代表的是默认的意思,前面未加default
2、protected
(1)不能修饰外部类
外部类和外部类之间访问权限只有包内和包外,自然对应default和public,其余情况都是多余的。
疑问?protected的其他包中的类为什么不能继承,按照下面的链接讲解
https://blog.csdn.net/weixin_30689307/article/details/100091801
3、private
(1)不能修饰外部类
用private定义外部类是没有意义的,因为其他的类无法与该类沟通
4、abstract
(1)不能修饰成员变量
因为abstract是修饰未被实现的类和方法,由于成员变量(属性)不存在未被实现。例如:int age;age初始值就是0;String name;name初始值是""。所以不存在属性被实现这种情况的说法,故abstract不能修饰属性即成员变量。
(2)不能修饰构造方法
abstract可以用来修饰方法,但是该方法不能实现,然而构造方法是为了实现类的初始化,而且构造方法不能被继承,所以abstract不能修饰构造方法。
5、static
(1)不能修饰类
static修饰的东西随着类的加载而加载,假设修饰外部类,难道是随着应用的启动而加载吗?如果未用到该类,岂不是浪费内存,故用static修饰外部类没有意义。
(2)不能修饰构造方法
构造方法是用来new对象用的,而static是在对象new之前随着类的加载而加载的,
6、final
(1)不能修饰构造方法
构造方法不能通过继承得到(构造方法名必须和类名一样,父子类不能同名,所以不能继承,不能重写,可以重载),加final没有任何意义