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. HTML学记笔记

    <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...

  2. Git 教程(三):仓库与分支

    远程仓库 到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了. 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了, ...

  3. 2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215

    2018-2019-2 <网络对抗技术> Exp1 PC平台逆向破解 20165215 目录 知识点描述 实验步骤 (一)直接修改程序机器指令,改变程序执行流程 (二)通过构造输入参数,造 ...

  4. Cron表达式解析

    每一个域可出现的字符如下:Seconds:          可出现     ", - * /"     四个字符,有效范围为0-59的整数Minutes:          可出 ...

  5. 4、网上收集Storm 讲解图

    1.Storm与Kafka集成 我们知道storm的作用主要是进行流式计算,对于源源不断的均匀数据流流入处理是非常有效的, 而现实生活中大部分场景并不是均匀的数据流,而是时而多时而少的数据流入,这种情 ...

  6. php项目命名规范

    命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录使用小写+下划线: 类库.函数文件统一以.php为后缀: 类的文件名均以命名空间定义,并 ...

  7. [c/c++] programming之路(29)、阶段答疑

    一.指针不等于地址 指针不仅有地址,还有类型,是一个存储了地址的变量,可以改变指向:而地址是一个常量 #include<stdio.h> #include<stdlib.h> ...

  8. 数据挖掘领域十大经典算法之—SVM算法(超详细附代码)

    https://blog.csdn.net/fuqiuai/article/details/79483057

  9. 什么是MTBF测试【转】

    本文转载自:https://blog.csdn.net/liuhaoemail/article/details/50531489 MTBF测试 目前,终端侧的可靠性测试基本上是采用称为”MTBF测试” ...

  10. 【转载】TCP /IP协议详解

    首先,TCP/IP不是一个协议,而是一个协议族的统称. 里面包括了IP协议,IMCP协议,TCP协议,以及http.ftp.pop3协议等等. TCP/IP协议分层 提到协议分层,我们很容易联想到IS ...