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 把属性从子类传递给父类进行赋值

目录
相关文章
|
7月前
|
存储 设计模式 Java
JavaSE 面向对象程序设计初级 2024方法变量封装javabean结合内存图详解
JavaSE 面向对象程序设计初级 2024方法变量封装javabean结合内存图详解
40 7
|
7月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
60 0
|
7月前
|
存储 Java
JavaSE 面向对象程序设计初级 静态static 包package 常量final 代码块 代码实操理论内存原理详解
JavaSE 面向对象程序设计初级 静态static 包package 常量final 代码块 代码实操理论内存原理详解
40 0
|
7月前
|
安全 编译器 C语言
【再识C进阶3(下)】详细地认识字符分类函数,字符转换函数和内存函数
【再识C进阶3(下)】详细地认识字符分类函数,字符转换函数和内存函数
|
2月前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
356 1
|
30天前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
2月前
|
Java
JVM内存参数
-Xmx[]:堆空间最大内存 -Xms[]:堆空间最小内存,一般设置成跟堆空间最大内存一样的 -Xmn[]:新生代的最大内存 -xx[use 垃圾回收器名称]:指定垃圾回收器 -xss:设置单个线程栈大小 一般设堆空间为最大可用物理地址的百分之80
|
2月前
|
Java
JVM运行时数据区(内存结构)
1)虚拟机栈:每次调用方法都会在虚拟机栈中产生一个栈帧,每个栈帧中都有方法的参数、局部变量、方法出口等信息,方法执行完毕后释放栈帧 (2)本地方法栈:为native修饰的本地方法提供的空间,在HotSpot中与虚拟机合二为一 (3)程序计数器:保存指令执行的地址,方便线程切回后能继续执行代码
25 3
|
2月前
|
存储 缓存 监控
Elasticsearch集群JVM调优堆外内存
Elasticsearch集群JVM调优堆外内存
55 1
|
2月前
|
Arthas 监控 Java
JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。

热门文章

最新文章