当前位置: 首页 > news >正文

对Java继承中的访问权限与强转问题的小理解

基础知识
  • 来源于人工智能中的knowledge grap,就是is与has的关系,学生是人,但人不一定是学生,他是有方向的
  • 在同名包下的两个类可以有相互继承,需要用到extends
package e2 public class Person { protected String name; protected int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package e1; public class Student extends Person{ private double grade; public double getGrade() { return grade; } public void setGrade(double grade) { this.grade = grade; } }

如果在这时候加一个方法

public String msg(){ return name+","+age+","+grade; }

按照我们的思路是没有问题的(就是一起返回嘛),但是会报错.why?唯一原因就是你引用的Persion包中对这两个属性定义的是private,这就代表这俩只可以在Persion中正常调用(就像getGrade那样),外部是无调用的,这就引出了新的访问权限的修饰就是protected,他就可以允许子孙后代调用了

构造方法

这时,我们想在e1的Student中加一个构造方法

public Student(String name, int age, double grade) { super(name,age) this.grade = grade; }

super其实就是把调用父类的构造方法,在没有super且父类也没有无参构造方法的情况下,编译器其实会在即加一个super并同步的在父类中加一个空的构造方法,这时编译器不会报错,知道运行后才会因为空方法而报错,为什么不直接写三个this.呢?emmm,这不父类有嘛,省事喽

转换
Person p1 = new Person(); Person p2 = new Student(); Student s1 = (Student) p1; Student s1 = (Student) p2;

你可以正常写Persion p2 = new Student(),但是你如果想直接p2.setGrade(3.2)是不行的,因为编译器会认为p2是Persion类的,而其中并没有这个,所以只能强转((Student)p2).setGrade(3.2),当然,你同样可以写Student s1=(Student)p2,但是Student s1=(Student)p1就不行,因为编译看左边,运行看右边p1还是Persion的对象,强转直接崩溃,可以用System.out.println(p1 instanceof Student);来判断是哪类,他也可以处理继承

http://www.jsqmd.com/news/767895/

相关文章:

  • 唯众AI教学与实训平台:从教学到科研全流程,附实操代码与技术拆解
  • 二进制分析框架pasta:连接Ghidra与angr的中间表示与自动化工具链
  • 从零构建智能网页向量索引系统:原理、实现与优化
  • 紧急预警:Docker 27.1将废弃--link参数,所有依赖可视化编排的低代码平台(如简道云、明道云)容器化方案需立即重构——附向后兼容迁移路径图
  • 基于Transformer与零样本分类的文本氛围分析工具VibeCheck实践指南
  • 1Panel开源服务器面板:Go+React架构与容器化运维实践
  • 构建Python量化交易回测平台:5步实现专业级可视化分析工具
  • PCB切片分析工具:Bamtone MS90集成AI的智能测量解决方案
  • AJAX 投票:技术解析与应用场景
  • 基于Web Audio与Canvas实现浏览器端音视频动态合成
  • 一套Skills库干掉30%手工测试,老板已经在问了
  • 系统分析师刷题系列--数据库系统(四)
  • Z-Image-LM权重验证效果展示:LM系列在跨域prompt(中西建筑融合)下表现
  • 2025届最火的五大AI科研方案实测分析
  • 解锁论文新境界:书匠策AI,毕业论文的“智能魔法棒”
  • ProseMirror View 插件生态系统分析:常用插件及其实现原理
  • Linux随记(三十)
  • Windows内核级硬件标识伪装技术实现与隐私保护应用
  • 基于Simulink的储能变流器(PCS)并网预同步与离/并网无缝切换控制​
  • 从零构建智能网页索引系统:内容提取、语义分块与向量检索实战
  • 04-图——从BFS、DFS到拓扑排序
  • Python:Netmiko实现网络设备巡检及配置备份
  • 大厂AI布局启示录:小白也能抓住高薪机遇,一起学大模型!
  • Windows 11/Win10本地磁盘告急?试试用SSHFS把云服务器挂成“无限外挂硬盘”
  • slidev-agent-skill:为AI智能体赋能,自动化创建Slidev演示文稿
  • Armv8-A virtualization 笔记 (一)
  • RepoAgent:基于大语言模型的智能代码仓库分析与自动化文档生成
  • 【逻辑回归从原理到实战:正则化、参数调优与过拟合处理】
  • 网络安全之GRE
  • 基于 Simulink 的数字控制延时补偿与稳定性分析深度实战教程