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

个人号推广

博客主页

多多!-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

这篇关于JavaSE 面向对象程序设计进阶 继承和方法重写 2024理论与内存详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074334

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等