1. 简介

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

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

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

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

2. 示例

2.1 示例1

 package modify.pack1;
public class FaObject1 {
protected void sp(){
System.out.println("father method");
}
} package modify.pack1;
public class SonObject1 extends FaObject1{
public static void main(String[] args){ SonObject1 sb1 = new SonObject1();
sb1.sp(); // (1) FaObject1 fb = new FaObject1();
fb.sp(); // (2)
}
} package modify.pack2;
import modify.pack1.FaObject1;
public class SonObject2 extends FaObject1 {
public static void main(String[] args){ SonObject2 sb2 = new SonObject2();
sb2.sp(); // (3) FaObject1 fb = new FaObject1();
// fb.sp(); // (4)编译错误
}
} package modify.pack2;
import modify.pack1.FaObject1;
public class UnrelatedObject {
public static void main(String[] args){ FaObject1 fb = new FaObject1();
// fb.sp(); // (5) 编译错误
}
}

解释说明如下:

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

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

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

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

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

2.2 示例2

 package modify.pack3;
public class FaObject3 {
public static void main(String[] args){ FaObject3 fb3 = new FaObject3();
try {
fb3.clone(); // (1)
}
catch (CloneNotSupportedException e) {
e.printStackTrace();
} SonObject3 sb3 = new SonObject3();
try {
sb3.clone(); // (2)
}
catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
} package modify.pack3;
public class SonObject3 extends FaObject3{
public static void main(String[] args){ SonObject3 sb3 = new SonObject3();
try {
sb32.clone(); // (3)
}
catch (CloneNotSupportedException e) {
e.printStackTrace();
} FaObject3 fb3 = new FaObject3();
// fb3.clone(); // (4) 编译错误
}
}

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

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

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

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

!!!

java protected修饰符说明的更多相关文章

  1. java protected修饰符理解

    Protected类型可以在本包和子类中访问的含义.在本包中访问,顾名思义,可以在定义类的包中的任何地方申请一个包含protected修饰符的域和方法的类的对象,并通过这个对象访问被protected ...

  2. 深入理解Java的protected修饰符

    其实Java的protected修饰符,权限定义的很微妙,大致有以下几种: (1)protected控制符用于修饰方法和成员变量: (2)一个类的protected方法或成员变量,在包外是不能通过该类 ...

  3. JAVA类型修饰符(public,protected,private,friendly)

    JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...

  4. java访问修饰符

    了解面向对象思想的同学们,都知道"封装"这一基本特征,如何正确运用访问修饰符,恰恰能体现出封装的好坏. java访问修饰符有四个: 1)public:访问权限最高,其修饰的类.类变 ...

  5. Java的修饰符

    转自:http://blog.csdn.net/manyizilin/article/details/51926230#L42 修饰符: 像其他语言一样,Java可以使用修饰符来修饰类中方法和属性.主 ...

  6. Java访问修饰符(访问控制符)

    Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private bo ...

  7. Java 5- Java 修饰符

    Java 修饰符 Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class ...

  8. Java类修饰符的使用与作用以及常见问题

    首先明确,类是放在文件里的,在文件里面的不同位置就有不同的作用,就是不同类型的类. 1, 顶级类or外部类:包括两种,一个文件中与文件名同名称的类我们称作顶级类(也是外部类),如果在一个文件中的一个类 ...

  9. java入门---修饰符&访问修饰符&非访问修饰符

        Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符     修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class ...

随机推荐

  1. 关于Aspose.Words插入表格单元格的高度问题的解决

    最近在工作中遇到客户要将PDF打印的文档插入的表格行高缩小.为解决这个问题,我百度了好长时间,让没有直接来说明这个问题的,我不清楚是我遇到的问题太low了,各位大神不屑一顾.终于我在几个家之所长,把问 ...

  2. Appium(一)---环境搭建的一些问题

    最近开始学习Appium,一款很不错的自动化测试工具,网上已经有大量的环境搭建教程,我就不再细说,我搭建环境时主要参考如下两个博客https://www.cnblogs.com/yoyoketang/ ...

  3. C++ 创建快捷方式

    https://blog.csdn.net/morewindows/article/details/6686683

  4. linux之添加切换用户、系统变量、selinux、防火墙、系统中文乱码的讲解

    ######linux用户分类1.root 用户 linux皇帝 2.普通用户 贫民百姓 [root@oldboyedu-01 oldboy]# useradd oldboy[root@oldboye ...

  5. Codeforces Round #503 (by SIS, Div. 2)

    连接:http://codeforces.com/contest/1020 C.Elections 题型:你们说水题就水题吧...我没有做出来...get到了新的思路,不虚.好像还有用三分做的? KN ...

  6. linux启动httpd服务出现 Could not reliably determine the server`s fully qualified domain name.

    安装好apache启动httpd服务时,出现httpd: Could not reliably determine the server's fully qualified domain name,  ...

  7. Django模板语言

    day66 2018-05-08 1. 内容回顾 1. 模板系统(字符串替换) 1. 语法 1. 变量相关: {{ name }},{{name|length}},{{name|default:&qu ...

  8. linux服务基础之http协议

    URI:Uniform Resource Identifier URL: Uniform Resource Locator,用于描述某服务器某特定资源的位置 URN: Uniform Resource ...

  9. macOS在使用音视频通话时会降低其他音频声音的解决方法

    在使用QQ进行通话时,背景无法播放音乐(声音过小),并且在QQ for mac中也没有进行调整的设置选项. Solution: printf "p *(char*)(void(*)())Au ...

  10. 剑指offer 11:二进制中 1 的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题代码 法一: public class Solution { public int NumberOf1(int n) { ...