java的protect_Java的protect修饰限制

1. 简介

对protected修饰符进行阐述,结合Object类的clone方法进行说明。其中clone方法如下:protected Object Object.clone();

关于protected修饰符的访问权限如下:

子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;

子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,子类不能访问基类实例的protected方法。

2. 示例

2.1 示例1

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 packagemodify.pack1;2 public classFaObject1 {3 protected voidsp(){4 System.out.println("father method");5 }6 }7

8

9 packagemodify.pack1;10 public class SonObject1 extendsFaObject1{11 public static voidmain(String[] args){12

13 SonObject1 sb1 = newSonObject1();14 sb1.sp(); //(1)

15

16 FaObject1 fb = newFaObject1();17 fb.sp(); //(2)

18 }19 }20

21

22 packagemodify.pack2;23 importmodify.pack1.FaObject1;24 public class SonObject2 extendsFaObject1 {25 public static voidmain(String[] args){26

27 SonObject2 sb2 = newSonObject2();28 sb2.sp(); //(3)

29

30 FaObject1 fb = newFaObject1();31 //fb.sp();//(4)编译错误

32 }33 }34

35

36 packagemodify.pack2;37 importmodify.pack1.FaObject1;38 public classUnrelatedObject {39 public static voidmain(String[] args){40

41 FaObject1 fb = newFaObject1();42 //fb.sp();//(5) 编译错误

43 }44 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

解释说明如下:

(1)FaObject1和SonObject1在同一个包内,子类实例可以访问自身继承的sp方法,编译通过;

(2)FaObject1和SonObject1在同一个包内,子类可以访问父类实例的sp方法,编译通过;

(3)FaObject1和SonObject2不在同一个包内,子类实例可以访问自身继承的sp方法,编译通过;

(4)FaObject1和SonObject2不在同一个包内,子类不可以访问父类实例的sp方法,编译错误;

(5)FaObject1和UnrelatedObject不在同一个包内,该类不可以访问其他类实例的protected方法,编译错误;

2.2 示例2

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 packagemodify.pack3;2 public classFaObject3 {3 public static voidmain(String[] args){4

5 FaObject3 fb3 = newFaObject3();6 try{7 fb3.clone(); //(1)

8 }9 catch(CloneNotSupportedException e) {10 e.printStackTrace();11 }12

13 SonObject3 sb3 = newSonObject3();14 try{15 sb3.clone(); //(2)

16 }17 catch(CloneNotSupportedException e) {18 e.printStackTrace();19 }20 }21 }22

23

24 packagemodify.pack3;25 public class SonObject3 extendsFaObject3{26 public static voidmain(String[] args){27

28 SonObject3 sb3 = newSonObject3();29 try{30 sb32.clone(); //(3)

31 }32 catch(CloneNotSupportedException e) {33 e.printStackTrace();34 }35

36 FaObject3 fb3 = newFaObject3();37 //fb3.clone();//(4) 编译错误

38 }39 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

(1)Object和FaObject3不在同一个包内,子类实例可以访问继承Object类的clone方法,编译通过;

(2)FaObject3和SonObject3在同一个包内,子类实例可以访问继承FaObject3类的clone方法,编译通过;

(3)FaObject3和SonObject3在同一个包内,子类实例可以访问继承FaObject3类的clone方法,编译通过;

(4)fb3的clone方法来自于Object类,该方法的可见性为java.lang包和Object类的FaObject3子类,对于SonObject3类不可见,因此编译错误;

!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值