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 ...
随机推荐
- php 中 global 与 $GLOBAL 的区别
很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是$GLOBALS['var'] 是外部的全局变量$var本身. global $var 是外部$var的同 ...
- dynamic的使用
一.在没有dynamic之前,我们想要获取返回object对象里的属性的值时,使用反射的方法来获取该对象的属性值. class Program { static void Main(string[] ...
- 第十四节 JS面向对象基础
什么是面向对象:在不需要知道它内部结构和原理的情况下,能够有效的使用它,比如,电视.洗衣机等也可以被定义为对象 什么是对象:在Java中对象就是“类的实体化”,在JavaScript中基本相同:对象是 ...
- flutter -webview 报错 err_cleartext_not_permitted
文件 android\app\src\main\AndroidManifest.xml <manifest xmlns:android="http://schemas.android. ...
- Java集合中的细节
integer数据对比 对于Integer var = ? 在-128至127范围内的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值 ...
- Linux启动过程简述
Linux启动过程: 图片来自:https://www.cnblogs.com/codecc/p/boot.html 简单来讲: 加载BIOS–>读取MBR–>Boot Loader–&g ...
- mfc双缓冲绘图
1.要求 在界面加载本地图片并显示,每过100ms改变一张图片显示 2.现象 通过定时器控制CImage,Load,Draw,Destroy,会非常的卡顿.因为Load图片时,会是非常大的数据[所有C ...
- Pycharm,Python 安装OpenCV and CV2 时,报错,教你如何正确安装。
Collecting cv2 Could not find a version that satisfies the requirement cv2 (from versions: ) No matc ...
- js中的所有鼠标事件 键盘事件
https://www.cnblogs.com/torchstar/p/null.html
- contenOs7
echo 'export PATH="/home/conda/ls/bin:$PATH"'>>~/.bashrc source ~/.bashrc python