当前位置: 首页 > 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.dtcms.com/a/271665.html

相关文章:

  • Python 机器学习核心入门与实战进阶 Day 7 - 复盘 + 综合实战挑战
  • NW658NW659美光固态闪存NW660NW708
  • 陶哲轩:数学界的莫扎特与跨界探索者
  • 离线二维码生成器,无需网络快速制作
  • 神经网络基础及API使用详解
  • 【项目经理】经典面试题0002:项目经理和交付经理的区别?
  • 变频器实习DAY3
  • S7-1500——(一)西门子PLC编程从入门到精通3、基于TIA 博途结构化控制语言——SCL(一)
  • 全连接神经网络(MLP)原理与PyTorch实现详解
  • 【freertos-kernel】MemMang
  • Deepseek搭建智能体个人知识库
  • LeetCode经典题解:1、两数之和(Two Sum)
  • Python Day8
  • 第九篇:信息化知识 --系统集成项目管理工程师 第3版专题知识点笔记
  • MySQL--函数
  • [Python 基础课程]关键字
  • 1068.产品销售分析Ⅰ
  • S7-1500——(一)从入门到精通1、基于TIA 博途解析PLC程序结构(三)
  • 2025年ATL宁德新能源Verify测评演绎推理数字计算SHL测评题库高分攻略分享
  • 10.9 大模型训练数据优化实战:3步让准确率从68%飙升至79%
  • Redis-哨兵机制doctor环境搭建
  • 虚拟机安装与使用vim编辑器简单使用
  • # 手机连接Wifi热点时如何设置手机的MAC地址绑定固定的静态IP地址?
  • 客户端与服务端数据加密方案及实现
  • TCP的可靠传输机制
  • Linux系统-----nfs存储,共享配置文件
  • LLM 在预测下一个词的时候是怎么计算向量的,说明详细过程
  • QT6 源(158)模型视图架构里的文件系统模型 QFileSystemModel 篇一:属性,成员函数,与信号函数
  • 练习:对象数组 5
  • 【隐藏谷歌原生Qsb,将Widget中的Qsb组件替换至原位(解决GMS包添加后默认Qsb搜索框无法操作的问题)】