很好理解,类和接口如果定义成private,那么其他任何类都不能访问,这样的类写出来也没有意义。
protected:
这个问题用反证法比较好解释清楚,假设类B和A不在同一个包,A又是protected类, 那么B能访问A的前提是B是A的子类,而B能成为A的子类(或者说B能继承A)的前提又是B能访问A。这两个条件互为前提,无法实现。
private:
接口是需要其他类实现的, 如果方法定义成private,那么其他任何类都不能访问。这样的方法即要求被实现,又对任何类不可见,这是无法实现的。
protected:
(1)假设public接口I有一个protected方法M,那么位于其他包的public类C就可以实现这个接口(方法M依然是protected)。那么C的同包类D调用方法M只能这样访问:
1
2
|
C c =
new
C();
c.M();
|
无法这样访问:
1
2
|
I c =
new
C();
c.M();
|
这样就失去了使用接口的重要意义:提供统一的接口,面向接口编程思想也无法体现。
(2)假设接口I是default的, 那么方法M是protected理论上是没有问题的,而且M也可以是default、public。至于为什么不让用protected,可能是出于简化修饰词的复杂度的目的(如果使用,需要区分接口是public的时候不能用,default接口则能用),至于default请参考(3).
default:
(3)假设public接口I有一个default方法M, 那么位于其他包的无法正常实现接口I,因为方法M对其不可见。
(4)假设default接口I有一个default方法M,那么方法M是default理论上是没有问题的,而且M也可以是proteced、public。可能出于和(2)所说不能用protected的相同原因,不能使用default。
因此,综合以上四点,接口方法只能使用public,既然只能用public,java编译器在你忘了在M前写public的时候干脆自动帮你转成public了。
原文链接:
https://blog.csdn.net/guotongxuexue/article/details/77929259
那么我们能够发现
protected
是可以让不同包的子
类
去进行调用的,那么我们想想一个
类
可能是一个
接口
的子
类
吗?显然不可能,
类
只能实现
接口
,但那不叫继承
接口
。虽然
接口
也是有子
接口
的,但那又如何呢,
类
还是无法继承
接口
啊。而如果
default
和
private
就能够让
类
实现
接口
里的
方法
,那么
protected
的存在
private
(私有的)无法访问:
使用
private
关键字,就意味着被声明的成员或
方法
,除了本
类
,其他任何
类
都无法访问。
public(公共的)
接口
访问权限:
使用
public关键字,就意味着被声明的成员或
方法
对所有
类
都是可以访问的。
protected
(受保护的)继承访问权限:
使用
protected
关键字,就意味着被声明的成员或
方法
,在子
类
以及相同包内的其他
类
都可以访
在Spring AOP中,动态代理会拦截被代理对象的
方法
调用,并在
方法
调用前后添加一些额外的逻辑(如事务管理、日志记录等)。该
方法
的主要作用是将原始的返回值转换为代理对象期望的返回值
类
型,以确保在返回时返回的是代理对象,而不是原始对象。所以最开始实例化的springbean将被后面的aop cglib代理
类
替换掉,导致调用
private
方法
时,也是
使用
的cglib代理
类
。在Spring AOP中,如果一个
方法
的返回值
类
型是一个被代理的
类
型(即在AOP切面中被代理的
类
),Spring会
使用
。
以下
修饰
符从低到高依次排序
public :本
类
可以访问、同包可以访问、子
类
也可访问、其他位置可以访问
protect :本
类
可以访问、同包可以访问、子
类
可以访问、其他位置
不能
访问
默认 :本
类
可以访问、同包可以访问、子
类
不可以访问、其他位置
不能
访问
private
: 非本
类
不能
访问
假设在非同包的情况,有一个用
protected
修饰
符
修饰
的
类
T,此时还有一个在其他包的子
类
T2继承,现在,子
类
T2的main
方法
中创建
在传统的Java编程中,被广为人知的一个知识点是:java Interface
接口
中
不能
定义
private
私有
方法
。只允许我们定义public访问权限的
方法
、抽象
方法
或静态
方法
。但是从Java 9 开始,Interface
接口
中允许定义私有
方法
和私有静态
方法
。下面我们就来为大家介绍其语法规则,和为什么要有这样的设计。其实在Java 8之前,还有另一个被广为人知的知识点:
接口
中所有的
方法
...
对于java程序员来说,java的访问权限
修饰
词public、
protected
、
default
、
private
的区别和
使用
肯定都不是问题,这里也不再啰嗦了,反正度娘一搜就一大把。最近在整理java core的培训资料时,想到了几个关于权限
修饰
词的问题:为什么
类
和
接口
(不考虑内部
类
和
接口
)
不能
使用
private
和
protected
修饰
词,只能是public和
default
?为什么
接口
的
方法
不能
是p...
1.java
修饰
符访问权限--public,
protected
,
private
,
default
(package,friendly)被public
修饰
的
类
、
类
属变量及
方法
,可以被包内及包外的任何
类
访问;被
protected
修饰
的
类
、
类
属变量及
方法
,包内的任何
类
,及包外的那些继承了此
类
的子
类
才能访问;被
private
的
修饰
的
类
、
类
属变量及
方法
,包内包外的任何
类
均
不能
访问;如果一个
类
、
类
属变量及
方法
不以...