在子类中不能通过父类对象实例来访问父类的protected属性和方法

2023-11-01

四种修饰符的作用域

java中变量、方法和类有四种修饰符public,protected,default,private,它们的作用域范围如下:

  • public: 拥有最大的权限,可以在本项目中的任意类中访问
  • protected: 可以在本包下和其子类访问(本包子类或其他包的子类)
  • default: 本包下的当前类和其他类可以访问
  • private: 只能在当前类下访问
访问修饰符 当前类 同一包 子类(不同包) 其他包
public ✔️ ✔️ ✔️ ✔️
protected ✔️ ✔️ ✔️
default ✔️ ✔️
private ✔️

测试

先声明一个父类

package com.parent;

public class Animal {
    public int id = 0;

    protected String name = "animal";

    String color = "white";

    private int age = 2;

    public Animal(int id, String name, String color, int age) {
        this.id = id;
        this.name = name;
        this.color = color;
        this.age = age;
    }

    public Animal() {

    }
}

1.在本包下测试

package com.parent;

public class TestAnimal1 {
    public static void main(String[] args) {
        Animal animal = new Animal(1,"animal1","black",3);
        System.out.println(animal.id);  //public 
        System.out.println(animal.name); //protected
        System.out.println(animal.color); //default
        System.out.println(animal.age); //private 编译失败,说明即使相同包,private修饰的变量也不能在其他类中访问
        
    }
}

2.在不同包下测试

package com.child;

import com.parent.Animal;

public class TestAnimal2 {
    public static void main(String[] args) {
        Animal animal = new Animal(1,"animal1","black",3);
        System.out.println(animal.id);  //public 可以正常访问
        System.out.println(animal.name);	//protected 编译失败
        System.out.println(animal.color);  //default 编译失败
        System.out.println(animal.age);  //private 编译失败
    }
}

可以看到,在不同包下的其他类中,只能访问public修饰的变量

3.在不同包下的子类(因相同包下的子类和情况1相同,不再讨论)

package com.child;

import com.parent.Animal;

public class Bird extends Animal {
    public static void main(String[] args) {
        Bird bird = new Bird();
        System.out.println(bird.id);  //public
        System.out.println(bird.name); //protected ,编译成功,说明protected 是可以在不同包下的子类访问的
        System.out.printf(bird.color);  //default 编译失败
        System.out.println(bird.age);	//private 编译失败

    }
}

现在,我把上边的前两行代码稍微修改一下

Animal animal = new Animal(); //创建了一个父类对象的实例
System.out.println(animal.name);  //此时用protected修饰的name,是访问不到的

可以看到,我在子类Bird中,创建了一个父类Animal的实例,去访问父类的protected属性,会访问不到
在这里插入图片描述
可以看到只能点出来用public修饰的id属性,由此可以得出,在不同包的子类去访问父类的protected属性是有一定限制的.

那我在当前子类创建另外一个子类的对象,能不能访问父类的protected属性呢?
可以做一个测试,先创建一个子类Cat继承Animal

package com.child;

import com.parent.Animal;

public class Cat extends Animal {

}

同样的在子类Bird中创建Cat实例,可以看到同样的只能访问父类的id属性,
在这里插入图片描述

protected使用总结:
1.在子类中可以通过子类对象来访问父类的protected属性和方法
2.在子类中不能通过父类对象来访问父类的protected属性和方法
3.在子类中不能通过其他子类的对象来访问父类的protected属性和方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在子类中不能通过父类对象实例来访问父类的protected属性和方法 的相关文章

  • HTTP 状态 404 - 请求的资源不可用

    在使用 MyEclipse IDE 中的 Tomcat 服务器和 Struts 2 框架时 我遇到了反复出现的问题 我将我的程序作为服务器应用程序运行 当它运行时 默认的index jsp 文件将成功打开 但应用程序的其他过去都不起作用 当
  • 任务“:app:dexDebug”执行失败

    我目前正在处理我的项目 我决定将我的 Android Studio 更新到新版本 但在我导入项目后 它显示如下错误 Information Gradle tasks app assembleDebug app preBuild UP TO
  • java中的csv到pdf文件

    我正在尝试获得一个csv文件解析为pdf 到目前为止我所拥有的内容附在下面 我的问题是这段代码最终出现在 pdf 中的文件在 csv 文件的第一行被截断 我不明白为什么 附示例 本质上我想要一个没有任何操作的 csv 文件的 pdf 版本
  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • 如何打印整个字符串池?

    我想打印包含文字的整个字符串池String使用添加的对象intern 就在垃圾收集之前 JDK有没有隐式的方法来进行这样的操作 我们如何检查字符串池 EDIT The comment suggests that there may be a
  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • Spring Stomp over Websocket:流式传输大文件

    我的SockJs客户端在网页中 发送帧大小为16K的消息 消息大小限制决定了我可以传输的文件的最大大小 以下是我在文档中找到的内容 Configure the maximum size for an incoming sub protoco
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • Java:VM 如何在 32 位处理器上处理 64 位“long”

    JVM 如何在 32 位处理器上处理 64 位的原始 long 在多核 32 位机器上可以并行利用多个核心吗 64 位操作在 32 位机器上慢了多少 它可能使用多个核心来运行不同的线程 但不会并行使用它们进行 64 位计算 64 位长基本上
  • 为什么 ConcurrentHashMap::putIfAbsent 比 ConcurrentHashMap::computeIfAbsent 更快?

    使用 ConcurrentHashMap 我发现computeIfAbsent 比putIfAbsent 慢两倍 这是简单的测试 import java util ArrayList import java util List import
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • 不兼容的类型:在 java netbeans 中对象无法转换为 String

    我试图在我的项目中使用对象数组 但出现错误 incompatible types Object cannot be converted to String 在这一行 ST1 new String emt1 emt2 emt3 emt4 现在
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • 如何移动图像(动画)?

    我正在尝试在 x 轴上移动船 还没有键盘 我如何将运动 动画与boat png而不是任何其他图像 public class Mama extends Applet implements Runnable int width height i
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • Path2D 上的鼠标指针检测

    我构建了一个Path2D http docs oracle com javase 7 docs api java awt geom Path2D html表示由直线组成的未闭合形状 我希望能够检测何时单击鼠标并且鼠标指针靠近路径 在几个像素
  • MongoDB Java 驱动程序:MongoCore 驱动程序与 MongoDB 驱动程序与 MongoDB 异步驱动程序

    MongoDB Java 驱动程序有三种不同的驱动程序选项 核心驱动 MongoDB 驱动程序 MongoDB 异步驱动程序 The 驱动程序描述页面 https docs mongodb org ecosystem drivers jav

随机推荐

  • Node.js 获取当前时间

    1 安装依赖 npm install silly datetime 2 引入依赖 const sd require silly datetime 3 使用 const time sd format new Date YYYY MM DD H
  • IDEA远程断点调试jar包项目

    文章目录 前言 一 准备工作 1 jar包应用 1 IDEA配置 二 断点调试 1 运行jar包 2 访问接口 3 进来断点 三 注意点 总结 前言 springboot 项目在开发完 打成一个 jar 包 放到服务器运行时 如果报错了 怎
  • Java面试上岸秘籍!粉丝刷题一周换工作,爆笑嘲讽竟变大厂青睐

    封面来自一个粉丝的反馈 添加图片注释 不超过 140 字 可选 粉丝通过阿嘴的Java面试库换工作了 刷题一周搞定工作 一周前还被面试官嘲讽 我也替他感觉高兴 没想到题库能帮到他这么多 这是多大的回报率 他也已经成功证明了自己 说实话 像这
  • C++Primer学习笔记(11)

    这篇文章的内容是动态内存 这一块有点进阶了 是之前很少接触过的部分了 关注点有这几个 全局对象 局部对象 局部static对象 动态对象 提炼一下 静态内存 栈内存 自由空间 堆 不同的内存空间有相对应的对象 一 动态内存与智能指针 都是重
  • 【编译原理】SLR(1)分析方法(c++实现)

    基本流程 Created with Rapha l 2 2 0 输入文法 拓广文法 构造DFA 识别活前缀的自动机 SLR 1 分析表 SLR 1 分析输入串
  • 附加:在在下部分区/县(数据表)

    返回上篇文章 全国各省 市 区 全部 sql语句 https blog csdn net m0 55400356 article details 122144741 comments 22531263 附加 sql语句 六 在在下部分区 县
  • Zotero6.0时代来临!新的文献阅读生态

    zotero迎来6 0正式版的更新 内置PDF阅读器与笔记编辑器极大重构了我的文献阅读生态 本文记载了基于6 0版本的zotero配置过程 本文相干的软件与插件如下 相关软件 Zotero SumatraPDF Obsidian Subli
  • length、length()、size() 的区别

    Length 数组的大小 length 字符串的大小 size 集合类 map set list 的大小 length length是一个关键词 主要用于获取数组的长度 对于数组来说 length是一个公有的实例变量 通过数组对象的属性来获
  • 我想用cesium来实现模型压平,代码实现

    使用 Cesium 来实现模型压平可以通过使用其 API 来实现 主要包括 Cesium loadTerrain 和 Cesium sampleTerrainMostDetailed 两个函数
  • 关于git上传代码到云效,git下载云效代码到本地

    一 安装git Git官方下载地址 gt gt https git scm com downloads Standalone Installer 一直点击next就安装好了 根据自己电脑更改安装路径 鼠标右击电脑主屏幕中有 Git命令 说明
  • Mac Navicat12.0.22 安装手册和操作说明

    小编的系统是MacOS Catalina10 15 4 Navicat Premium Mac 12 0 22 一 安装 首先 带大家了解下安装大致流程 安装包的准备 安装 验证 Navicat Premium Mac 12 0 22下载地
  • 分苹果_100分_A/B卷复用_位运算/异或运算

    分苹果 题目描述 A B两个人把苹果分为两堆 A希望按照他的计算规则等分苹果 他的计算规则是按照二进制加法计算 并且不计算进位 12 5 9 1100 0101 9 B的计算规则是十进制加法 包括正常进位 B希望在满足A的情况下获取苹果重量
  • HTML代码学习

    任务 请根据给出的需求 在基本模板上完善网页 网页包括首页 登录 注册界面 实现3个页面功能 页面外观请参考给出的具体图片 首页代码 h1 各位 注意了 这个页面是 是首页 h1 p p
  • LLVM 的编译框架基本流程探索(Clang AST语法树)

    上一篇文章末尾提到 AST语法树 语句如下 clang fmodules fsyntax only Xclang ast dump src pp CompStream cpp include
  • php找两个数组对比,PHP如何对比两个数组是否相同

    第一种方法 降维成字符串 这种方法真对多维数组 思路是把数组降维成字符串 比如用json decode serialize 等函数转成字符串后再进行比较 第二种 用PHP自带对比函数 但只能支持二维数组 比较数组 返回数组的交集 只比较键值
  • React.js 官方资料摘记:状态提升

    状态提升 官网上那个例子很复杂 所以我在这里做了简化 说明的内容是一样的 先说明一下实现目标 有两个输入框 当一个输入框输入内容时 另一个自动输入相同内容 实现原理 将两个输入框的value属性的值绑定到父类中去 将两个输入框的onChan
  • iPhone 手机浏览器 font-size 失效问题

    问题 电脑端浏览器显示正常 iPhone手机浏览器却异常 如下图 用Safari调试iPhone手机网页 可以看到设置了 font size 12px 但实际浏览器渲染的字体大小却是 16px 解析 因为 Font Boosting 字体提
  • 安全测试常用几个工具

    下面介绍了这些工具的主要功能以及教程 书籍 视频等 端口扫描器 Nmap Nmap是 Network Mapper 的缩写 众所周知 它是一款非常受欢迎的免费开源黑客工具 Nmap被用于发现网络和安全审计 据数据统计 全世界成千上万的系统管
  • 【华为OD机试】周末爬山 (C++ Python Java)2023 B卷

    题目描述 周末小明准备去爬山锻炼 0代表平地 山的高度使用1到9来表示 小明每次爬山或下山高度只能相差k及k以内 每次只能上下左右一个方向上移动一格 小明从左上角 0 0 位置出发 输入描述 第一行输入m n k 空格分隔 代表m n的二维
  • 在子类中不能通过父类对象实例来访问父类的protected属性和方法

    四种修饰符的作用域 java中变量 方法和类有四种修饰符public protected default private 它们的作用域范围如下 public 拥有最大的权限 可以在本项目中的任意类中访问 protected 可以在本包下和其