Java|类的继承中两种错误的解决方式 |案例介绍
时间:2022-07-22
本文章向大家介绍Java|类的继承中两种错误的解决方式 |案例介绍,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
|案例介绍
在日常用Java写代码的过程中,往往在子类继承父类时,会出现一些问题。今天我来讲解两个常见问题的解决方式。
|问题分析1
重写父类方法时修改权限导致继承失败。
源码如下:
class Test{
public Test(){
protected void doAe(){
protected Test doIt(){
return new Test();
}
}
}
}
class Test2 extends Test{
public Test2(){
super();
super.doAe();
}
public void doAenew(){
}
public void doAe(){
}
private Test2 doIT(){
return new Test2();
}
}
|解决方案
当重写父类方法时,修改的方法权限只能从小的范围到大的范围改变,如上面的程序,父类中的doAe()方法的权限为protected,继承后子类中的方法doAe()的修饰权限只能修改为public,或者不变。
修改后的代码如下:
class Test{
public Test(){
protected void doAe(){
protected Test doIt(){
return new Test();
}
}
}
}
class Test2 extends Test{
public Test2(){
super();
super.doAe();
}
public void doAenew(){
}
public void doAe(){
}
public Test2 doIT(){
return new Test2();
}
}
|问题分析2
实例化子类对象前,无参数的父类构造函数执行,但有参数的却未执行。
源码如下:
class Pa{
public Pa(){
System.out.println("调试父类的构造方法。");
}
public Pa(String[] args){
System.out.println("调用父类带参数的构造方法。");
}
}
class AaPa extends Pa{
public AaPa(){
System.out.println("调用子类的AaPa()构造方法。");
}
}
public class AaCc extends AaPa{
AaCc(){
System.out.println("调用子类的AaCc()构造方法。");
}
public static void main(String[] args){
AaCc a = new AaCc();
}
}
|解决方案
在调用子类构造方法之前,会自动调用父类无参数的构造函数,若想要执行父类带参数的构造函数,只能使用super关键字显示调用父类的构造方法。
修改后的代码如下:
class Pa{
public Pa(){
System.out.println("调试父类的构造方法。");
}
public Pa(String[] args){
System.out.println("调用父类带参数的构造方法。");
}
}
class AaPa extends Pa{
public AaPa(){
super("args");
System.out.println("调用子类的AaPa()构造方法。");
}
}
public class AaCc extends AaPa{
AaCc(){
System.out.println("调用子类的AaCc()构造方法。");
}
public static void main(String[] args){
AaCc a = new AaCc();
}
}
- C++库大全
- 人工智能行业前景预测 全球市场或超2700亿元
- Arxiv网络科学论文摘要14篇
- 工信部:网络强国建设2018年重点工作任务
- 刚刚!张小龙再出重磅!微信小程序掀起新零售红利狂潮!
- 无人驾驶系列——深度学习笔记:Tensorflow的安装-windows系统
- 2018年12大顶级云安全威胁
- 缤果盒子为域名意识打call 六位数秒下bingobox.com
- 用Qt写软件系列二:QCookieViewer(浏览器Cookie查看器)
- 用Qt写软件系列一:QCacheViewer(浏览器缓存查看器)
- 用Qt写软件系列三:一个简单的系统工具(上)
- ChartDirector应用笔记(三)
- 汇编语言 手记9
- 程序员一年写百万行代码是什么体验?这肯定是个Bug
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 使用QEMU模拟树莓派Raspberry Pi
- Octave梯度下降法最优化代价函数的一个例子—ML Note 38
- Spring Boot入门系列(十八)mybatis 使用注解实现增删改查,无需xml文件!
- Mongodb多键索引之嵌套文档
- MySQL中的这几类日志,你一定要知道
- 微服务技术栈:API网关中心,落地实现方案
- 你的数据库服务器IO调度算法不对,难怪那么慢
- Android 11 强制用户使用系统相机?
- LeetCode题目38:外观数列
- GPUManager虚拟化方案
- [网络安全] 二.Web渗透信息收集之域名、端口、服务、指纹、旁站、CDN和敏感信息
- 程序员进阶系列:你真的懂 HelloWorld 吗?
- 零基础Python教程040期 序列分片技术
- JS实现图片弹窗效果
- [网络安全] 一.Web渗透入门基础与安全术语普及