首页 > 系统相关 >JavaSE 面向对象程序设计进阶 继承和方法重写 2024理论与内存详解

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

时间:2024-06-23 13:29:22浏览次数:28  
标签:进阶 构造方法 继承 子类 方法 2024 JavaSE 父类 重写

继承

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

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

为什么要继承

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

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

标签:进阶,构造方法,继承,子类,方法,2024,JavaSE,父类,重写
From: https://blog.csdn.net/qq_30500575/article/details/139763945

相关文章

  • from 2024.6.23 to unkown
    中考?不做评价。Question1【AGC023E】给定一个长度为\(n\)的正整数序列\(A\),对于一个长度为\(n\)的全排列\(P\),记\(I(P)\)表示\(P\)的逆序对数量,求:\[\underset{\forall1\leqi\leqn,P_i\leqA_i}{\sum}I(P)\]\(1\leqn\leq2\times10^5,1\leqA_i\leqn\)......
  • 2024/6/23 本周总结
    DemoFusion:DemocratisingHigh-ResolutionImageGenerationWithNo$$$2024/5/11任意尺度超分生成一个\(K\)倍大小的图像,需要边长扩大为\(\sqrt{K}\),就是从潜在空间(latentsapce)\(\mathbb{R}^{c\timesh\timesw}\)到目标空间\(\mathbb{R}^{c\times{H}\timesW}\),其中\(......
  • 【2024全国赛前多校联考1】逆序对
    题意:给定\(n,K\)。对于\(i=1,2,3,\cdots,n\),你需要求出在所有逆序对数为\(k\)个的排列中\(i\)位置在小根笛卡尔树上的深度之和。数据范围:\(n\le300,K\le\dfrac{n(n-1)}{2}\)。思路:我们要求的是:\[\sum_{inv(p)=K}dep(i)\]这个\(dep(i)\)即\(i\)的祖先个数,考......
  • UNIQUE VISION Programming Contest 2024 Summer (AtCoder Beginner Contest 359)
    A-CountTakahashi(abc359A)解题思路遍历判断即可神奇的代码#include<iostream>#include<algorithm>#include<vector>#include<queue>#include<map>#include<set>#include<cstring>usingnamespacestd;#defineendl'\n......
  • 2024年6月计算机视觉论文推荐:扩散模型、视觉语言模型、视频生成等
    6月还有一周就要结束了,我们今天来总结2024年6月上半月发表的最重要的论文,重点介绍了计算机视觉领域的最新研究和进展。DiffusionModels1、AutoregressiveModelBeatsDiffusion:LlamaforScalableImageGenerationLlamaGen,是一个新的图像生成模型,它将原始的大型语言模型......
  • JAVA高级进阶09
    第九天、IO流IO流-字符流文件字符输入流-读字符数据进来FileReader(文件字符输入流)作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去。文件字符输出流-写字符数据出去FileWriter(文件字符输出流)作用:以内存为基准,把内存中的数据以字符的形式写出到文件......
  • Java 学习知识点汇集(2024.6)
    VSCode,run程序时,提示,错误:找不到或无法加载主类Exam_32猜测原因,目录中有中文字符?解决办法:**在Java中,final类不能作为父类被继承**。讯飞星火:在Java的LSP(LiskovSubstitutionPrinciple,里氏替换原则)中,如果一个类被设计为不可变的(immutable)或者已经完成的(complete),它应该......
  • AI职场写作|为你所做的学习过滤,入门与进阶
    GPT的使用门槛已经变得越来越低,之前文章中推荐的2款GPT零成本应用平台,已经不需要考虑网络、成本问题了。学会跟GPT对话,是一项要尽快掌握的技能。未来最快实现的,可能不是AI取代我们,而是不会使用AI的人,逐渐被懂得使用AI的人所取代。在未来,各种AI的应用,在使用上,肯定会变......
  • 【HDC 2024】华为云开发者联盟驱动应用创新,赋能开发者成长
    本文分享自华为云社区《【HDC2025】华为云开发者联盟驱动应用创新,赋能开发者成长》,作者:华为云社区精选。6月21日到23日,华为开发者大会(HDC2024)于东莞松山湖举行,这里有丰富多样的主题演讲、峰会、专题论坛和互动体验,数百场面向开发者的特色活动,汇聚璀璨星光、激发创新灵感……6......
  • 线段树进阶
    P5787二分图/【模板】线段树分治普通二分图:染色染色无法扩展,先考虑加边如果两点在同一联通块内:加边只需要考虑连边的两个点颜色是否相同如果不在同一联通块内,第一次加边为YES,合并联通块,接下来的操作同上再考虑删边线段树分治思想解决问题:容易插入,难删除,且插入顺序不影响......