JavaSE 面向对象程序设计进阶 继承和方法重写 2024理论与内存详解

简介: JavaSE 面向对象程序设计进阶 继承和方法重写 2024理论与内存详解

继承

面向对象三大特征:封装 继承 多态

封装:对象代表什么,就封装对应的数据,并提供数据对应的行为,把零散的数据变成一个整体

为什么要继承

两个类中重复的代码(数据和方法)太多,所以要继承

extend关键字

类与类之间的父子关系

让一个类和另一个类建立起继承关系

public class Student extends Person{}

student 子类 派生类

preson 父类 基类 超类

继承的好处

1.可以把子类的重复代码放入父类,提高代码的复用性

2.子类可以在父类的基础上,增加其他的功能,使子类更强大

继承怎么用

1.自己设计

2.使用别人

继承注意点

类与类存在共性 子类是父类的一种 可以考虑继承优化代码

设计继承不能全部抽用 要考虑 种类

物品的的名称 人物的名称 不能放到一个父类里面

手机的名称 零食的名称 文具的名称可以放到一个父类里面

继承的特点

1.java只支持单继承

一个子类只能继承一个、去

2.java不支持多继承

一个子类不能同时继承多个父类

3.java能支持多层继承

多层继承不是多继承

子类A可以继承父类B,父类B可以继承父类C,B是A的直接父类,C是A的间接父类

4.Object类

每一个类都直接或者间接的继承于Object(爷爷类 祖宗类)

查看当前类是否有父类,如果没有,虚拟机则会将该类继承到Object类(加一个默认继承关系)

继承练习

学会画图

从下(子类)往上(父类)

共性内容抽取

子类是父类的一种

书写代码时从上往下一个类一个类的写

一个圆圈就是一个类

写完所有类,类属于javabean

然后写main方法

再创建对象,调用类中的方法

如果访问修饰符为private而不是public

私有的成员方法,成员变量只能在本类中被使用

就无法在主类中被调用

子类到底能继承父类中的哪些内容

父类中有什么

构造方法 成员变量 成员方法

构造方法

统称为类的成员 分为非私有和private两种

父类构造方法不能被子类继承 能继承无法调用

因为public修饰的类名要与文件名一致

如果一个类中没有构造方法,虚拟机会给你一个构造方法(空参构造)

一个java文件中只写一个类

成员变量

set方法赋值 get方法获取值

成员方法

子类可以继承父类中的虚方法

继承的内存图

1.记载字节码文件时同时加载父类字节码文件

2.创建对象时 父类 子类 同时在堆内存内开辟空间 树状结构

方法出栈后 堆内存里面的垃圾(对象)会被自动清除

如果父类用中的成员变量用private修饰了 栈里面就找不到堆里面的了 相当于加了保险柜

成员变量的访问特点

就近原则:谁离我近,我就用谁

一级一级往上找

this关键字:指向本类中的成员变量

super关键字:指向父类中的成员变量

super不能链式编程

成员方法的访问特点

还是就近原则

super this 调用

和成员变量访问一样

方法重写

方法重写建立在子类和父类关系上

方法重写的本质

通过虚方法表

覆盖了虚方法中的方法

方法重写的注意事项的要求

1.重写方法的名称形参列表必须与父类中的一致

2.子类重写父类方法时,访问权限子类必须大于等于父类

3.子类重新父类方法时,返回值类型子类必须等于父类

4.重写方法尽量与父类保持一致

5.私有方法不能被重写

6.子类不能重写父类的静态方法,如果重写会报错

重写方法就是在父类的虚方法表里找方法覆盖

方法重写练习

画图法

从下往上 抽取

当父类行为不能满足子类的需求

重写时候用super。调用父类

@override注释可以检验重写是否正确

构造方法的访问特点

特点

1.父类中的构造方法不会被子类继承

2.子类中的所有构造方法默认先访问父类中的无参构造,再执行自己

为什么

1.子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据

2.子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化

怎么调用父类的构造方法

子类构造方法的第一行语句默认是super(),不写也存在,且必须在第一行

super() 访问父类的无参构造

父类中的空参构造是数据初始化

因为父类的属性都共享的被继承的

用子类构造方法中隐藏的super()去访问父类的无参构造

赋值

小结

1.子类不能继承父类的构造方法,但是可以通过super调用

2.子类构造方法的第一行,有一个默认的super()

3.默认先访问父类中无参数的构造方法,再执行自己

4.如果想要方法中父类有参构造,必须手动书写

this 是一个变量 表示当前方法调用者的地址值 局部变量

super 表示父类的存储空间

super 把属性从子类传递给父类进行赋值

目录
相关文章
|
6月前
|
存储 设计模式 Java
JavaSE 面向对象程序设计初级 2024方法变量封装javabean结合内存图详解
JavaSE 面向对象程序设计初级 2024方法变量封装javabean结合内存图详解
39 7
|
6月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
49 0
|
6月前
|
存储 Java
JavaSE 面向对象程序设计初级 静态static 包package 常量final 代码块 代码实操理论内存原理详解
JavaSE 面向对象程序设计初级 静态static 包package 常量final 代码块 代码实操理论内存原理详解
36 0
|
6月前
|
安全 编译器 C语言
【再识C进阶3(下)】详细地认识字符分类函数,字符转换函数和内存函数
【再识C进阶3(下)】详细地认识字符分类函数,字符转换函数和内存函数
|
4月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
392 0
|
2月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
64 1
|
2月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
2月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
2月前
|
存储 编译器
数据在内存中的存储
数据在内存中的存储
42 4
|
2月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
57 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配