java protected修饰符说明
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修饰符说明的更多相关文章
- java protected修饰符理解
Protected类型可以在本包和子类中访问的含义.在本包中访问,顾名思义,可以在定义类的包中的任何地方申请一个包含protected修饰符的域和方法的类的对象,并通过这个对象访问被protected ...
- 深入理解Java的protected修饰符
其实Java的protected修饰符,权限定义的很微妙,大致有以下几种: (1)protected控制符用于修饰方法和成员变量: (2)一个类的protected方法或成员变量,在包外是不能通过该类 ...
- JAVA类型修饰符(public,protected,private,friendly)
JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...
- java访问修饰符
了解面向对象思想的同学们,都知道"封装"这一基本特征,如何正确运用访问修饰符,恰恰能体现出封装的好坏. java访问修饰符有四个: 1)public:访问权限最高,其修饰的类.类变 ...
- Java的修饰符
转自:http://blog.csdn.net/manyizilin/article/details/51926230#L42 修饰符: 像其他语言一样,Java可以使用修饰符来修饰类中方法和属性.主 ...
- Java访问修饰符(访问控制符)
Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private bo ...
- Java 5- Java 修饰符
Java 修饰符 Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class ...
- Java类修饰符的使用与作用以及常见问题
首先明确,类是放在文件里的,在文件里面的不同位置就有不同的作用,就是不同类型的类. 1, 顶级类or外部类:包括两种,一个文件中与文件名同名称的类我们称作顶级类(也是外部类),如果在一个文件中的一个类 ...
- java入门---修饰符&访问修饰符&非访问修饰符
Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class ...
随机推荐
- 00004-20180324-20180517-fahrenheit_converter--华氏温度到摄氏温度转换计算器
00004-20180324-20180517-fahrenheit_converter--华氏温度到摄氏温度转换计算器 def fahrenheit_converter(C): fahrenheit ...
- Cannot locate BeanDefinitionParser for element [scoped-proxy]
指定使用 CGLIB 而不使用 JDK 生成代理对象:注意:此两个标签必须同时出现,不然会报:Cannot locate BeanDefinitionParser for element [scope ...
- mysql 纵表转横表
表名:sales SELECT NAME, sum( CASE MONTH WHEN '一月份' THEN money ELSE END ) AS '一月份', sum( CASE MONTH WHE ...
- Java面试题整理---Redis篇
1.redis支持五种数据结构类型? 2.redis内部结构? 3.redis持久化机制? 4.redis集群方案与实现? 5.redis为什么是单线程的? 6.redis常见回收 ...
- SQL并发处理方案——乐观锁和悲观锁
(一)乐观锁和悲观锁的概念 悲观锁 在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法.它可以阻 ...
- react中对于redux的封装
const createStore = (reducer)=>{ //默认的state对象 let state = {}; //将所有订阅的事件存在在这个数组中 let listeners = ...
- python的oop概述
python是面向对象的语言,那么究竟什么是面向对象? 首先理解类 类:在中文中的定义,许多相同或相似事物的综合.根据这个定义,类是许多相同或相似的实物聚在一起的.譬如,人类,鸟类,花类等. 面向对象 ...
- Mac休眠后解决卡死转圈问题
不知什么时候MacBookPro出现盒盖休眠后Wifi连不上,卡死,转圈问题 在网上搜索解决了下,具体什么原因先不用管了,有时间升级下系统 sudo killall airportd 应该是Mojav ...
- 《Java程序设计》课程实验要求
目录 <Java程序设计>课程实验要求 注册实验楼账号 实验一 Java开发环境的熟悉 实验二<Java面向对象程序设计> 实验三 <敏捷开发与XP实践> 实验四 ...
- 【笔记】Nginx热更新相关知识
(以下学习笔记内容均摘自参考链接,仅供个人查阅) 1.inotify文件系统监控特性 Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如 ...