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. 00004-20180324-20180517-fahrenheit_converter--华氏温度到摄氏温度转换计算器

    00004-20180324-20180517-fahrenheit_converter--华氏温度到摄氏温度转换计算器 def fahrenheit_converter(C): fahrenheit ...

  2. Cannot locate BeanDefinitionParser for element [scoped-proxy]

    指定使用 CGLIB 而不使用 JDK 生成代理对象:注意:此两个标签必须同时出现,不然会报:Cannot locate BeanDefinitionParser for element [scope ...

  3. mysql 纵表转横表

    表名:sales SELECT NAME, sum( CASE MONTH WHEN '一月份' THEN money ELSE END ) AS '一月份', sum( CASE MONTH WHE ...

  4. Java面试题整理---Redis篇

    1.redis支持五种数据结构类型?   2.redis内部结构?   3.redis持久化机制?   4.redis集群方案与实现?   5.redis为什么是单线程的?   6.redis常见回收 ...

  5. SQL并发处理方案——乐观锁和悲观锁

    (一)乐观锁和悲观锁的概念 悲观锁 在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法.它可以阻 ...

  6. react中对于redux的封装

    const createStore = (reducer)=>{ //默认的state对象 let state = {}; //将所有订阅的事件存在在这个数组中 let listeners = ...

  7. python的oop概述

    python是面向对象的语言,那么究竟什么是面向对象? 首先理解类 类:在中文中的定义,许多相同或相似事物的综合.根据这个定义,类是许多相同或相似的实物聚在一起的.譬如,人类,鸟类,花类等. 面向对象 ...

  8. Mac休眠后解决卡死转圈问题

    不知什么时候MacBookPro出现盒盖休眠后Wifi连不上,卡死,转圈问题 在网上搜索解决了下,具体什么原因先不用管了,有时间升级下系统 sudo killall airportd 应该是Mojav ...

  9. 《Java程序设计》课程实验要求

    目录 <Java程序设计>课程实验要求 注册实验楼账号 实验一 Java开发环境的熟悉 实验二<Java面向对象程序设计> 实验三 <敏捷开发与XP实践> 实验四 ...

  10. 【笔记】Nginx热更新相关知识

    (以下学习笔记内容均摘自参考链接,仅供个人查阅)   1.inotify文件系统监控特性 Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如 ...