java访问控制符

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shenshenzhiwen/article/details/80245622



访问一词,个人理解是

对于属性,是取值

对于方法,是调用


1.protected

只能修饰属性和方法,不能修饰外部类!!!

包间修饰符,不同的包是无法访问的

ex:{

在不同的包中创建一个类,

在该类中new一个新类,

该类带有protected修饰的方法,

是不能访问这个新类的protected方法的

}

但是也有一种方法,通过子类的继承,直接继承父类的方法和属性,然后访问自己的属性和方法。


2.private

只能修饰属性和方法,不能修饰外部类

类间修饰符,不同的类是无法访问的。

但是也有一种方法,通过本类提供的getter和setter方法,访问,其实还是类内访问实现的

ex:{

就像保险箱是封闭的

原子弹都炸不爆

但是钥匙却能打开,然后再关上

}

3.default

能够修饰接口,类,方法,属性

是严格的包间修饰符,

两个不同包间连import这个default修饰的类都做不到


4.public

能够修饰接口,类,方法,属性

是完全公开的

ex:{

就像北大西洋公约,

所有条约对北约国家都是公开的

所有法律都对人们公开

}


总之,以类的角度来看

public对所有类可见,所有public修饰的东西都可以直接访问

protected对同一包内的所有类和所有子类可见

default对同一包的内的所有类可见

private仅本类可见

可以看出是渐进严格的



ps:补充一点,关于继承的问题

从内存的角度,子类继承父类,首先是全部继承父类的方法和属性,然后在添加自己自身特有的方法和属性(当然都是以数据的形式),这样new创建类的过程不断向上super的原因就很明显了。子类拥有父类所有的东西,包括private的方法和属性,但是子类并没有访问的方法。就像你拥有的,并不等于你能够使用。这样内存上就会有不少的浪费,当然java讲究的是可扩展性和复用性,这远比C++实用得多得多。



展开阅读全文

没有更多推荐了,返回首页