Java Protected关键字你真的理解对了嘛

Java Protected关键字你真的理解对了嘛,第1张

Java Protected关键字你真的理解对了嘛 访问权限修饰符比较 privatedefaultprotectedpublic本类√√√√同包类×√√√子类××√√所有××××

如图表所示,private紧针对成员内部使用,public可被所有工作空间的类访问。default的权限比private要稍大一些,其更倾向于提供给同包类的成员所使用。protected相比与default访问权限又更大一点,其可以让自己的子类不同包调用

在平时开发过程中,对privated与public两种访问关键字的使用比较会比较多一些。对default与protected两个关键字使用的比较少,本文主要探讨的是protected关键字的注意点,关于default的使用场景与注意点不在探讨范围内。关于default的使用之处,大家可参考HashMap的putVal,resize等方法,考虑下为何使用default的访问修饰符。

protected访问权限修饰符

如图表所示,protected修饰的函数,可被当前类,同包类,及其子类所使用。初学时,大家会误以为,只要继承了该类,那么就可以使用该类的protected方法。没错,只要子类继承了父类,那么在子类内部是可以调用父类的protected方法,但是,若在其他类(不符合protected权限访问的类)中,去实例化子类,然后去调用=protected方法确是万万不可访问的。正如,protected的定义所言,protected修饰的函数,只可被当前类,同包类,及其子类所使用,在非以上所言的类中调用,即使实例化该子类,也是无法调用该方法。大家可以参考Object类的clone与finalize方法。我们无法在其他类内部,去调用已实例化类的clone,finalize方法。至于原因,就如上述所言。

protected访问权限修饰符的使用

如定义所言,若该方法被protected所修饰,则该方法不是很希望对外暴露,该方法可能只是对某一特定业务场景上下文所提供服务的。举个例子,如订单场景,根据需求,订单编号需满足dd+timestamp+order-type规则。所以,可以针对此场景书写生成订单编号工具方法,但该业务上下文会被打成jar包,被第三方所依赖,并且你还不此方法被第三方所引用。所以可以将该方法的权限设置为protected。

补充
  1. 大家在看源码的时候,会经常遇到protected或default修饰的函数,在平时开发的时候,也要有这样思想去考虑设计函数。P.S.如果你没看懂为什么该函数要使用非你内心所想的权限修饰符,其不要钻牛角尖,作者的心思你猜不到。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5574176.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存