private
private表示私有,用于修饰类的变量以及方法,被private修饰的变量和方法只能被类本身的实例调用或者内部类通过[类名].this.[变量或方法名]进行调用。主要用于类中封装相应的不想对外暴露的属性或者方法。
protected
protected表示保护的,介于private与public之间的访问修饰,可以用来修饰变量和方法,不可修饰类,比较形象的比喻,protected只允许朋友,亲戚,以及子女,本身来访问自身的资源。具体化为继承关系,同一个包下面,内部类,以及本身可以访问。可以理解为,对于类所处的包外的类,就是private修饰的相关资源。
public
访问权限最大化的修饰,被public修饰的变量,类,方法都是无条件的对外开放使用的,应用场景基本上用于接口开放,方法开发,共享,util等
default
default基本上和protected区别不大,只不过对于子类default是不可用的,而protected却是可以用的,其他方面与protected基本相同,default默认为friendly修饰。一般用于封装,处理一些内部逻辑
图示访问情况
类内部 | 本包 | 子类 | 外部包 | |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
default | Y | Y | N | N |
private | Y | N | N | N |
总结
因为楼主最近在学习设计模式并研究相关源码,然而对于处于码农阶段的楼主,最常用的就是public,很想在这篇帖子中写一些private,protected,default的应用场景。[相信了解设计以及架构的朋友能够说出一二].
对于private的应用场景我理解为类中一些不开放的处理和属性,在对外进行保密的时候并不开放出口,符合这类条件的都应该用private。但是private应该在实现类中进行声明,因为private的过于封闭,使得继承和实现的扩展性不是很好。由此推演,protected应该是在父类或者接口中修饰方法和变量的,以此达到继承的目的。而public则是修饰一个对外开放的util场景,接口场景使用到的修饰符。