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

Java SE--继承

一.为什么要继承呢?

可以保持原有类的功能上扩展新功能,继承主要解决的问题是共性的抽取,实现代码的复用

二.继承的语法

举例:

相关图像:

三.父类成员访问

1.子类中(注意访问父类的成员变量

了解原因:继承下来父类成员可能与子类成员同名时(主要原因),在子类成员方法中访问该类成员时该访问哪一个?或者利用子类对象引用同名成员时该访问哪一个?

子类方法中(在父类方法不一样)或子类对象访问成员时:

如果访问的成员变量子类中有,优先访问自己的成员变量。

如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义。

如果访问的成员变量与父类中成员变量同名,则优先访问自己的。

成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找。

举例和相关图像:

2.子类中访问父类的成员方法

子类方法中子类对象访问成员方法时:

通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则访问,否则编译报错。

通过派生类对象访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用方法适传递的参数选择合适的方法访问,如果没有则报错;如果父类和子类同名方法的参数列表相同(重写以后会讲)成员方法访问遵循就近原则,自己有优先自己的,如果没有则向父类中找。

举例和相关图像:

问题:如果出现在继承时出现同名成员变量或方法时,我们该在子类中如何访问与父类的成员变量和方法同名的成员变量和方法呢?

 四.super关键字

作用:在子类中访问父类的成员变量和方法

五.子类构造方法

1.若父类显式定义无参或者默认的构造方法在子类构造方法第一行默认有隐含的super()调用,即调用基类构造方法

2.如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。

3.在子类构造方法中,super(..)调用父类构造时,必须是子类构造函数中第一条语句

4.super(..)只能在子类构造方法中出现一次,并且不能和this同时出现(讲this和super区别会讲)

六.this和super的区别

相同点:

1.都是lava中的关键字

2.只能在类的非静态方法中使用,用来访问非静态成员方法和字段

3.在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在

不同点:

1.this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用

2.在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性

3.在构造方法中:this(..)用于调用本类构造方法,super(..)用于调用父类构造方法,俩者都必须是构造方法的第一条语句,所以两种调用不能同时在构造方法中出现
4.构造方法中一定会存在super(..)的调用,用户没有写编译器也会增加,但是this(..)用户不写则没有

七.再谈初始化

之前在谈初始化时执行顺序时没有继承,那继承时执行顺序会是什么样呢?

由上述代码加上之前学习的对执行顺序进行总结:

步骤类别执行类容
1父类静态父类static修饰的成员变量初始化----》父类静态代码块
2子类静态子类static修饰的成员变量初始化----》子类静态代码块
3父类实例父类实例变量初始化---》父类实例代码块---》父类构造方法
4子类实例子类实例变量初始化---》子类实例代码块---》子类构造方法

八.protected(类和对象补充访问限定符)

代码举例:

九.继承方式

1.单继承

2.多层继承(最好别超过3层)

3.不同类继承一个类

4.多继承(不支持)

十.final关键字

1.修饰变量或字段(类中成员变量):表示常量(既不能修改)

2.修饰类:表示该类不能被继承,叫做密封类

3.修饰方法:表示该方法不能被重写(以后讲)

十一.继承和组合

继承表示对象之间是is-a的关系,比如:狗是动物,猫是动物
组合表示对象之间是has-a的关系,比如:汽车和其轮胎、发动机、方向盘、车载系统等的关系就应该是组合,因为汽车是有这些部件组成的

举例:

http://www.xdnf.cn/news/1092871.html

相关文章:

  • 基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(4)集成Allure报表
  • 机器视觉之工业相机讲解
  • 鸿蒙商城开发:ZKmall开源商城系统特性适配与性能优化
  • 【PyTorch】PyTorch中torch.nn模块的全连接层
  • vscode 防止linux索引爆红
  • Java+AI精准广告革命:实时推送系统实战指南
  • JVM 调优
  • 打破传统,开启 AR 智慧课堂​
  • 矩阵之方阵与行列式的关系
  • 最新全开源礼品代发系统源码/电商快递代发/一件代发系统
  • 【每日算法】专题六_模拟
  • 【libm】 16 IEEE 754-2019 maximum 函数实现(fmaximum_num.rs)
  • linux正向配置dns解析
  • 100个GEO基因表达芯片或转录组数据处理025.GSE248467
  • AI智能体记忆架构的革命:LangGraph中的分层记忆系统实现
  • JAVA观察者模式demo【设计模式系列】
  • 基于YOLOv11的CF-YOLO,如何突破无人机小目标检测?
  • 【WEB】Polar靶场 21-25题 详细笔记
  • Prometheus+Grafana+node_exporter监控linux服务器资源的方案
  • 分库分表之实战-sharding-JDBC绑定表配置实战
  • CTFHub————Web[信息泄露(目录遍历、PHPINFO)]
  • 1.4 洛谷入门一题单全解
  • Explain关键字
  • Markdown 语法规则
  • 什么是 AMR 格式?简鹿音频转换器轻松批量转换 AMR 为 MP3
  • PHP语法高级篇(一):日期时间处理和包含文件
  • LLaMA 学习笔记
  • 装配式建筑4.0:当房子像汽车一样被“智造”
  • 数据结构——深度优先搜索与广度优先搜索的实现
  • 人机协同的关键枢纽:软件工程3.0中对象模型与模型驱动的融合路径