1. 简介
对protected修饰符进行阐述,结合Object类的clone方法进行说明。其中clone方法如下:protected Object Object.clone();
关于protected修饰符的访问权限如下:
-
子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;
-
子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,子类不能访问基类实例的protected方法。
2. 示例
2.1 示例1
1 package modify.pack1; 2 public class FaObject1 { 3 protected void sp(){ 4 System.out.println("father method"); 5 } 6 } 7 8 9 package modify.pack1; 10 public class SonObject1 extends FaObject1{ 11 public static void main(String[] args){ 12 13 SonObject1 sb1 = new SonObject1(); 14 sb1.sp(); // (1) 15 16 FaObject1 fb = new FaObject1(); 17 fb.sp(); // (2) 18 } 19 } 20 21 22 package modify.pack2; 23 import modify.pack1.FaObject1; 24 public class SonObject2 extends FaObject1 { 25 public static void main(String[] args){ 26 27 SonObject2 sb2 = new SonObject2(); 28 sb2.sp(); // (3) 29 30 FaObject1 fb = new FaObject1(); 31 // fb.sp(); // (4)编译错误 32 } 33 } 34 35 36 package modify.pack2; 37 import modify.pack1.FaObject1; 38 public class UnrelatedObject { 39 public static void main(String[] args){ 40 41 FaObject1 fb = new FaObject1(); 42 // fb.sp(); // (5) 编译错误 43 } 44 }
解释说明如下:
(1)FaObject1和SonObject1在同一个包内,子类实例可以访问自身继承的sp方法,编译通过;
(2)FaObject1和SonObject1在同一个包内,子类可以访问父类实例的sp方法,编译通过;
(3)FaObject1和SonObject2不在同一个包内,子类实例可以访问自身继承的sp方法,编译通过;
(4)FaObject1和SonObject2不在同一个包内,子类不可以访问父类实例的sp方法,编译错误;
(5)FaObject1和UnrelatedObject不在同一个包内,该类不可以访问其他类实例的protected方法,编译错误;
2.2 示例2
1 package modify.pack3; 2 public class FaObject3 { 3 public static void main(String[] args){ 4 5 FaObject3 fb3 = new FaObject3(); 6 try { 7 fb3.clone(); // (1) 8 } 9 catch (CloneNotSupportedException e) { 10 e.printStackTrace(); 11 } 12 13 SonObject3 sb3 = new SonObject3(); 14 try { 15 sb3.clone(); // (2) 16 } 17 catch (CloneNotSupportedException e) { 18 e.printStackTrace(); 19 } 20 } 21 } 22 23 24 package modify.pack3; 25 public class SonObject3 extends FaObject3{ 26 public static void main(String[] args){ 27 28 SonObject3 sb3 = new SonObject3(); 29 try { 30 sb32.clone(); // (3) 31 } 32 catch (CloneNotSupportedException e) { 33 e.printStackTrace(); 34 } 35 36 FaObject3 fb3 = new FaObject3(); 37 // fb3.clone(); // (4) 编译错误 38 } 39 }
(1)Object和FaObject3不在同一个包内,子类实例可以访问继承Object类的clone方法,编译通过;
(2)FaObject3和SonObject3在同一个包内,子类实例可以访问继承FaObject3类的clone方法,编译通过;
(3)FaObject3和SonObject3在同一个包内,子类实例可以访问继承FaObject3类的clone方法,编译通过;
(4)fb3的clone方法来自于Object类,该方法的可见性为java.lang包和Object类的FaObject3子类,对于SonObject3类不可见,因此编译错误;
!!!
[C语言] 文件操作,解压华为官方固件UNDATE.APP工具(源代码);
[Linux] 批量转换整个目录下的文件编码为UTF8;
[C语言] 文件操作,解压SZB格式中的一段函数片段;
[Android] patchrom的随笔(个人运行记录..);
App Store 申请经验 完整的IDP申请直到软件上架
timer
终于弄明白iPad UIPopoverController弹出窗口的位置和坐标了
UIPopoverController的使用
iPhone开发的一些小技巧
- 最新文章
-
C#是如何实现引用传值
Math 类为三角函数、对数函数和其他通用数学函数提供常数和静态方法
C#中Cache的使用
NTLDR is missing 文件丢失如何解决
.NET Framework 类库命名空间
Best Open Source Reporting Tools(转载)
C#窗体内嵌外部程序(cmd.exe)的显示(转载)
Oracle插入数据出现ORA29861错误
C#调用WebService出现“基础连接已经关闭:接收时发生错误”错误
Oracle插入数据出现ORA01691错误
- 热门文章
-
php webservice实例(转载)
Geoserver地图样式SLD资料收集
教你如何克隆Oracle 10g数据库,冷备份方式 (转载)
Office开发程序集版本及部署问题
Make a Native Windows Installer For Your Applications with these Open Source Tools(转载)
[C语言] 联想手机szb格式的制作工具,部分开源代码(仅提供程序思想);
[Linux] 批量查看Android应用程序的文件名称;
[C语言] 文件操作,对二进制文件追加二进制数据与补零的两个函数;
[Linux] man gcc
[C语言] 文件操作,合并两个二进制文件为单独一个二进制文件;