如图表所示,private紧针对成员内部使用,public可被所有工作空间的类访问。default的权限比private要稍大一些,其更倾向于提供给同包类的成员所使用。protected相比与default访问权限又更大一点,其可以让自己的子类(不同包)调用。
在平时开发过程中,对privated与public两种访问关键字的使用比较会比较多一些。对default与protected两个关键字使用的比较少,本文主要探讨的是protected关键字的注意点,关于default的使用场景与注意点不在探讨范围内。关于default的使用之处,大家可参考HashMap的putVal,resize等方法,考虑下为何使用default的访问修饰符。
如图表所示,protected修饰的函数,可被当前类,同包类,及其子类所使用。初学时,大家会误以为,只要继承了该类,那么就可以使用该类的protected方法。没错,只要子类继承了父类,那么在子类内部是可以调用父类的protected方法,但是,若在其他类(不符合protected权限访问的类)中,去实例化子类,然后去调用=protected方法确是万万不可访问的。正如,protected的定义所言,protected修饰的函数,只可被当前类,同包类,及其子类所使用,在非以上所言的类中调用,即使实例化该子类,也是无法调用该方法。大家可以参考Object类的clone与finalize方法。我们无法在其他类内部,去调用已实例化类的clone,finalize方法。至于原因,就如上述所言。
protected访问权限修饰符的使用如定义所言,若该方法被protected所修饰,则该方法不是很希望对外暴露,该方法可能只是对某一特定业务场景上下文所提供服务的。举个例子,如订单场景,根据需求,订单编号需满足dd+timestamp+order-type规则。所以,可以针对此场景书写生成订单编号工具方法,但该业务上下文会被打成jar包,被第三方所依赖,并且你还不此方法被第三方所引用。所以可以将该方法的权限设置为protected。
补充- 大家在看源码的时候,会经常遇到protected或default修饰的函数,在平时开发的时候,也要有这样思想去考虑设计函数。P.S.如果你没看懂为什么该函数要使用非你内心所想的权限修饰符,其不要钻牛角尖,作者的心思你猜不到。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)