我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java访问权限之 protected 修饰符

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java访问权限之 protected 修饰符

摘要

        在Java中,使用访问权限修饰符来保护对类、变量、方法和构造方法的访问,这类修饰符分别是public,protected,default,以及private。由于很多Java书籍对protected可见性的介绍都比较笼统,本文重点说明protected的权限

一、Java权限访问修饰符

各访问修饰符权限如下:

同一个类中同一个包内不同包的子类不同包的其他类
public
protected✔*
default
private

在上面所提到的四种修饰词中,除 protected 外都很好理解和掌握,在此略作简述:

  • public :能被所有的类访问。
  • default :只能被同一包中的类访问。
  • private :只能在定义它的类中被访问,其他类都访问不到。

二、protected关键字的可见性

    很多介绍Java语言的书籍(比如《Java编程思想》)都对protected做了介绍,但是描述的比较简单,基本都是一句话“被protected修饰的成员对于本包和其子类可见”。这种说法有点太过含糊,常常会对大家造成误解。实际上,protected的可见性在于以下几点:

  • 基类的protected成员在同一个包内可见。
  • 若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。
  • 不管是否在一个包中,在基类,都可以通过子类实例访问继承的来自父类的protected方法。
  • 若子类与基类不在同一包中,那么在基类中,不能通过子类实例访问(父类中没有)子类中特有的protected修饰的成员。


接下来我们通过下面几个关于protected方法可见性的例子进行详细解释protected关键字:

示例一:

package p1;public class Father1 {    protected void f() {} // 父类Father1中的protected方法}package p1;public class Son1 extends Father1 {}package p11;public class Son11 extends Father1{}package p1;public class Test1 {    public static void main(String[] args) {        Son1 son1 = new Son1();        son1.f(); // Compile OK ----(1)        son1.clone(); // Compile Error ----(2)        Son11 son = new Son11();            son11.f(); // Compile OK ----(3)        son11.clone(); // Compile Error ----(4)    }}
  • 首先看(1) (3),其中f()方法从类Father1继承而来,其可见性是包p1及其子类Son1和Son11,而由于调用f()方法的类Test1所在的包也是p1,同一个包内可见,因此(1)(3)处编译通过。
  • 其次看(2) (4),其中clone()方法所在类为Object默认根类,而Object类所在包为java.lang包。其可见性是java.lang包及其所有子类,对于语句“son1.clone();”和“son11.clone();”,二者的clone()在类Son1、Son2中是可见的(可以使用的),但在Test类是不可见的,因此(1)(3)处编译不通过
     

示例二:

package p2;public class Father2 {    protected Object clone() throws CloneNotSupportedException{        return super.clone();    }}package p22;import p2.Father2;public class Son2 extends Father2 {    public static void main(String args[]) throws CloneNotSupportedException {        Father2 f2 = new Father2();        f2.clone(); // Compile Error ----(1)        Son2 son2 = new Son2();        son2.clone(); // Complie OK ----(2)    }}
  • 对于(1)而言,clone()方法来自于类Father2本身,因此其可见性为包p2及Father2的子类,虽然Son2是Father2的子类,但在Son2中不能访问基类Father2的protected方法clone(),因此编译不通过;
  • 对于(2)而言,由于在Son2中访问的是其本身实例的从基类Father2继承来的的clone(),因此编译通过。

示例三:

package p3;import p33.Son3;public class Father3 {    public static void main(String[] argv) throws CloneNotSupportedException {        Son3 son3 = new Son3();        son3.clone();  // Compile OK ------(1)    }}package p33;import p3.Father3;public class Son3 extends Father3 {}
  • 不管是否在同一个包中,在基类中,可以通过子类实例访问继承的来自基类的protected方法。(当然,基类clone()方法,也是继承自java.lang.Object))

示例四:

package p4;import p44.Son4;public class Father4 {    public static void main(String[] argv){        Son4 son4 = new Son4();        son4.clone();  // Compile Error -----(1)    }}package p44;import p4.Father4;public class Son4 extends Father4 {    protected Object clone() throws CloneNotSupportedException {        return super.clone();    }}
  • 在基类中,不能通过子类实例访问(基类中没有)子类中特有的protected修饰的成员。

示例五:

package p5;public class Father5 {    protected Object clone() throws CloneNotSupportedException{        return super.clone();    }}package p5;public class Test5 {    public static void main(String[] args) throws CloneNotSupportedException {        Father5 f5 = new Father5();        f5.clone();  // Compile OK ----(1)    }}
  • clone() 方法来自类Father5,其可见性为包p5 及其子类。

示例六:

package p6;public class Father6 {    public static void main(String[] args) throws CloneNotSupportedException {        Son6 son6 = new Son6();        son6.clone();  // Compile OK -------(1)    }}class Son6 extends Father6{}
  • 不管是否在同一个包中,在基类中,可以通过子类实例访问继承的来自基类的protected方法。(当然,父类clone()方法,也是继承自java.lang.Object))

示例七:

package p7;public class Father7 {}class Son7 extends Father7{    public static void main(String[] args){        Father7 f7 = new Father7();        f7.clone();  // Compile Error ----- (1)    }}
  • clone方法来自于java.lang.Object,可见性为java.lang这个包和对应继承了这个clone()方法的子类,及Father7类中。

三、引用

Java基础知识详解: protected修饰符

Java访问权限之 protected详解

Java protected 关键字详解

来源地址:https://blog.csdn.net/zhangx_developer/article/details/130421720

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java访问权限之 protected 修饰符

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

php访问权限修饰符怎么使用

这篇文章主要介绍“php访问权限修饰符怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php访问权限修饰符怎么使用”文章能帮助大家解决问题。PHP访问权限修饰符有三种:1、public,表示共
2023-07-02

php访问权限修饰符有哪几种

PHP访问权限修饰符有三种:1、public,表示共有的,权限范围最大,在任意位置都可以访问;2、protected,表示受保护的、继承的,只能类本身和类的内部成员可以访问;3、private,表示私有的,只能在类定义的大括号内才可以访问。本文操作环境:Windows10系统、PHP8.1版、Dell G3电脑php访问权限修饰符有哪几种有三种:public 共有的protected 受保护的,继承
2022-06-30

java项目中修饰符的访问权限有哪些

这篇文章给大家介绍java项目中修饰符的访问权限有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带
2023-05-31

Java中protected的访问权限范围是多少

在Java中,protected是一种访问修饰符,用于控制成员变量、方法和构造函数的访问权限。当使用protected修饰时,该成员可以被同一个包中的类以及其他包中的子类访问。具体来说,protected的访问权限范围包括以下情况:- 同一
2023-10-23

java权限修饰符的种类有哪些

Java权限修饰符有四种,分别是:public:公共的,可以被任何其他类访问。private:私有的,只能在定义该变量或方法的类中访问。protected:受保护的,可以被同一个包中的其他类访问,以及该类的子类访问。默认(无修饰符):
2023-10-25

Java如何使用访问修饰符

这篇文章主要介绍Java如何使用访问修饰符,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、简介访问修饰符是Java语法中很基础的一部分,但是能正确的使用Java访问修饰符的程序员只在少数。在Java组件开发中,如果
2023-06-25

详解Java中的访问修饰符

详解Java中的访问修饰符?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、作用及种类UML类图建模语言或标准建模语言类的属性、操作中的可见性使用+、#、-分别
2023-06-15

java封装及四种权限修饰符详解

这篇文章主要介绍了java封装及四种权限修饰符详解,对属性进行封装,使用户不能直接输入数据,我们需要避免用户再使用"对象.属性"的方式对属性进行赋值
2022-11-13

java的非访问修饰符有哪些?

Java提供了许多非访问修饰符来实现许多其他功能。static修饰符用于创建类方法和变量。 (推荐学习:java课程)final修饰符用于完成类,方法和变量的实现。abstract修饰符用于创建抽象类和方法。synchron
java的非访问修饰符有哪些?
2018-05-16

如何进行C++继承类成员访问权限修饰符的分析

这期内容当中小编将会给大家带来有关如何进行C++继承类成员访问权限修饰符的分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 前言C++提供了三个修饰符来限定类成员的被访问权限,分别是public ,
2023-06-21

java中访问修饰符的作用是什么

Java中的访问修饰符用于控制类、变量、方法等成员的访问权限。访问修饰符包括public、protected、private和默认(即不使用任何修饰符),其作用如下:public:公共访问修饰符,表示该成员可以被任何类访问。protect
java中访问修饰符的作用是什么
2024-03-12

PHP权限控制修饰符疑难解答:解答常见问题,帮助你更好地理解和应用权限控制修饰符

PHP权限控制修饰符疑难解答:在Web应用程序中,权限控制是一个非常重要的部分,越来越多的应用程序需要对用户进行身份验证和授权以保护敏感数据。在PHP中,我们可以使用权限控制修饰符来控制类和方法的可见性,以实现更好的访问控制。本文将讨论
PHP权限控制修饰符疑难解答:解答常见问题,帮助你更好地理解和应用权限控制修饰符
2024-01-19

浅谈一下Java中的访问修饰符以及作用

这篇文章主要介绍了浅谈一下Java中的访问修饰符以及作用,修饰符修饰的是“被访问”的权限,所有修饰符都可以修饰成员变量,方法,构造方法,需要的朋友可以参考下
2023-05-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录