news 2026/5/7 4:16:39

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
对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);来判断是哪类,他也可以处理继承

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 4:16:38

系统分析师刷题系列--数据库系统(四)

1.分布式数据库系统除了包含集中式数据库系统的模式结构之外,还增加了几个模式级别,其中()定义分布式数据库中数据的整体逻辑结构,使得数据使用方便,如同没有分布一样。 A.分片模式 B.全局外模式 C.分布模式 D.全局概念模式 [正确…

作者头像 李华
网站建设 2026/5/7 4:16:33

告别英文困扰:GitHub中文化插件终极指南

告别英文困扰:GitHub中文化插件终极指南 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 还在为GitHub满屏的英文界面而头疼…

作者头像 李华
网站建设 2026/5/7 4:16:33

Bruno API客户端One Dark主题安装与深度定制指南

1. 项目概述:一个为Bruno设计的One Dark主题如果你和我一样,日常工作中需要频繁地与API打交道,那么Bruno这款开源的API客户端工具,很可能已经成为了你工具箱里的常客。它轻量、快速、不依赖云端,所有数据都保存在本地&…

作者头像 李华
网站建设 2026/5/7 4:15:29

Kubernetes Operator开发实战:从脚手架到生产级应用

1. 项目概述:一个为Kubernetes Operator开发量身定制的脚手架如果你正在或即将踏入Kubernetes Operator开发领域,面对从零搭建一个符合最佳实践的Operator项目框架时感到无从下手,那么b1e55ed-operator-template这个项目很可能就是你一直在寻…

作者头像 李华