继承(全)

article/2025/6/22 17:43:06

⾯向对象思想中提出了继承的概念,专⻔⽤来进⾏共性抽取,实现代码复⽤。

1.什么是继承

如:狗和猫都是动物,那么我们就可以将共性的内容进⾏抽取,然后采⽤继承的思想来达到共⽤。

 // Animal.javapublic class Animal{String name;int age;public void eat(){System.out.println(name + "正在吃饭");}public void sleep(){System.out.println(name + "正在睡觉");}}// Dog.javapublic class Dog extends Animal{    void bark(){System.out.println(name + "汪汪汪~~~");}}// Cat.Javapublic class Cat extends Animal{   void mew(){System.out.println(name + "喵喵喵~~~");}}// TestExtend.javapublic class TestExtend {public static void main(String[] args) {Dog dog = new Dog();// dog类中并没有定义任何成员变量,name和age属性肯定是从⽗类Animal中继承下来的 System.out.println(dog.name);System.out.println(dog.age);// dog访问的eat()和sleep()方法也是从Animal中继承下来的 dog.eat();dog.sleep();dog.bark();}}

从上述代码我们可以看到Dog类和Cat类的部分代码重复使⽤了Animal中的代码。

#注:

(1).⼦类会将⽗类中的成员变量或者成员⽅法继承到⼦类中

(2).⼦类继承⽗类之后,必须要新添加⾃⼰特有的成员,体现出与基类的不同,否则就没有必要继承了

2.⽗类成员访问

(1)⼦类和⽗类不存在同名成员变量

 public class Base {int a;int b;}public class Derived extends Base{int c;public void method(){a = 10;    // 访问从⽗类中继承下来的a b = 20;    // 访问从⽗类中继承下来的b c = 30;    // 访问⼦类⾃⼰的c }}

(2)⼦类和⽗类成员变量同名

 public class Base {int a;int b;int c;}public class Derived extends Base{int a;              // 与⽗类中成员a同名,且类型相同char b;              // 与⽗类中成员b同名,但类型不同public void method(){a = 100;        b = 101;        c = 102;        // d = 103;     }}

在⼦类⽅法中或者通过⼦类对象访问成员时:

子类自己有优先访问自己的,如果没有去父类里面找,有就用父类的,都没有报错

(3)⼦类中访问⽗类的成员⽅法

通过  方法名+() 访问

#注:和上面原则一样

如果同名还想访问父类里面的成员方法,用super.方法名+() 访问

public class Base {int a;int b;public void methodA(){System.out.println("Base中的methodA()");}public void methodB(){System.out.println("Base中的methodB()");}}public class Derived extends Base{int a;    // 与⽗类中成员变量同名且类型相同 // 与⽗类中methodA()构成重载 public void methodA(int a) {System.out.println("Derived中的method()⽅法");}// 与基类中methodB()构成重写(即原型⼀致,重写后序详细介绍) public void methodB(){System.out.println("Derived中的methodB()⽅法");}public void methodC(){// 对于同名的成员变量,直接访问时,访问的都是⼦类的a = 100;   // 等价于: this.a = 100; b = 101;   // 等价于:this.b = 101; // 注意:this是当前对象的引⽤// 访问⽗类的成员变量时,需要借助super关键字 // super是获取到⼦类对象中从基类继承下来的部分 super.a = 200;super.b = 201;// ⽗类和⼦类中构成重载的⽅法,直接可以通过参数列表区分访问⽗类还是⼦类⽅法methodA();      // 没有传参,访问⽗类中的methodA() methodA(20);    // 传递int参数,访问⼦类中的methodA(int) // 如果在⼦类中要访问重写的基类⽅法,则需要借助super关键字methodB();      // 直接访问,则永远访问到的都是⼦类中的methodA(),基类的⽆法访问到super.methodB(); // 访问基类的methodB() }}

#注:

• super可以访问⽗类的成员变量

• super可以访问⽗类的成员⽅法

• super还可以调⽤⽗类当中指定的构造⽅法,接下来我们看⼀下

• 只能在⾮静态⽅法中使⽤

3.子类构造方法

要在⼦类对象构造完成之前,先帮助⽗类对其中的成员进⾏初始化

 public class Base {public Base(int a){System.out.println("Base():" + a);}}public class Derived extends Base{public Derived(){super(10);//此时通过super(参数)的形式 System.out.println("Derived()");}}public class Test {public static void main(String[] args) {Derived d = new Derived();}}

#注:

• 通过super(参数)的形式可以调⽤⽗类指定的构造⽅法

• super()的形式只能出现在⼦类的构造⽅法当中且必须在第⼀⾏

当⽗类的构造⽅法是不带参数的构造⽅法且只有这⼀个的情况下,默认会添加⼀ 个super()。

4.super和this

相同点:

• 都是Java中的关键字

• 只能在类的⾮静态⽅法中使⽤,⽤来访问⾮静态成员⽅法和字段

• 在构造⽅法中调⽤时,必须是构造⽅法中的第⼀条语句,并且不能同时存在

不同点:

• this是当前对象的引⽤,当前对象即调⽤实例⽅法的对象,super相当于是⼦类对象中从⽗类继承下来部分成员的引⽤

• 在⾮静态成员⽅法中,this⽤来访问本类的⽅法和属性,super⽤来访问⽗类继承下来的⽅法和属性

• 在构造⽅法中:this(...)⽤于调⽤本类构造⽅法,super(...)⽤于调⽤⽗类构造⽅法,两种调⽤不能 同时在构造⽅法中出现

• 构造⽅法中⼀定会存在super(...)的调⽤,⽤⼾没有写编译器也会增加,但是this(...)⽤⼾不写则没 有

5.代码块初始化顺序

(1)无继承

 class Person {public String name;public int age;public Person(String name, int age) {this.name = name;this.age = age;System.out.println("构造⽅法执⾏");}{System.out.println("实例代码块执⾏");}static {System.out.println("静态代码块执⾏");}}public class TestDemo {public static void main(String[] args) {Person person1 = new Person("bit",10);System.out.println("============================");Person person2 = new Person("gaobo",20);}}

结果:

静态代码块执⾏
实例代码块执⾏
构造⽅法执⾏
============================
实例代码块执⾏
构造⽅法执⾏

(2)继承关系上的执⾏顺序

(代码省略啦!!!)

Person :静态代码块执⾏
Student :静态代码块执⾏
Person :实例代码块执⾏
Person :构造⽅法执⾏
Student :实例代码块执⾏
Student :构造⽅法执⾏
===========================
Person :实例代码块执⾏
Person :构造⽅法执⾏
Student :实例代码块执⾏
Student :构造⽅法执⾏

• ⽗类静态代码块优先于⼦类静态代码块执⾏,且是最早执⾏

• ⽗类实例代码块和⽗类构造⽅法紧接着执⾏ 比特就业课

• ⼦类的实例代码块和⼦类构造⽅法紧接着再执⾏

• 第⼆次实例化⼦类对象时,⽗类和⼦类的静态代码块都将不会再执⾏

6.继承⽅式

在JAVA中,不支持一对多(一个子类对多个父类)其余都可以

(⼀般我们不希望出现超过三层的继承关系)

7.final

final关键可以⽤来修饰变量、成员⽅法以及类。

修饰过后变量不可以被修改,方法不可以被重写,类不可以被继承。

8.组合

继承表⽰对象之间是is-a的关系,⽐如:狗是动物,猫是动物

组合表⽰对象之间是has-a的关系,⽐如:汽⻋

汽⻋和其轮胎、发动机、⽅向盘、⻋载系统等的关系就应该是组合,因为汽⻋是有这些部件组成的。

// 轮胎类 
class Tire{// ...}// 发动机类 
class Engine{// ...
}// ⻋载系统类 
class VehicleSystem{// ...
}class Car{private Tire tire;          // 可以复⽤轮胎中的属性和⽅法private Engine engine;      // 可以复⽤发动机中的属性和⽅法private VehicleSystem vs;   // 可以复⽤⻋载系统中的属性和⽅法// ...}// 某品牌是汽⻋
class Benz extend Car{// 将汽⻋中包含的:轮胎、发送机、⻋载系统全部继承下来 
}

组合和继承都可以实现代码复⽤,应该使⽤继承还是组合,需要根据应⽤场景来选择,⼀般建议:能 ⽤组合尽量⽤组合。


http://www.hkcw.cn/article/UqPhWmIraa.shtml

相关文章

车主因赖账被代驾举报酒驾 5元停车费引发风波

近日,浙江宁波一名兰博基尼车主酒后请代驾将车开到小区,随后自己开车进车库。因不愿支付代驾小哥垫付的5元停车费,被对方举报酒驾。交警检测发现,该车主血液中的酒精含量达59mg/100ml,达到酒驾标准。其驾驶证被扣12分,暂扣6个月,并被处以2000元以下罚款。事发当晚11时30…

非洲再现致命狮子咬人事件 商人不幸遇难

在纳米比亚西北部偏远地区的一处豪华度假村内,一名男子被狮子咬死。警方透露,这起悲剧发生在清晨,当时受害者正与其他游客在这家帐篷度假村露营,他在走出帐篷去上厕所时遭到袭击。其他露营者设法吓跑了狮子,但男子已经死亡。当地媒体确认,受害者是知名商人贝恩德・克贝尔…

Linux基础指令

一、Linux背景 1、发展史 要说Linux,还得从UNIX说起。 (1)UNIX发展的历史 • 1968年,⼀些来⾃通⽤电器公司、⻉尔实验室和⿇省理⼯学院的研究⼈员开发了⼀个名叫 Multics的特殊操作系统。Multics在多任务⽂件管理和⽤⼾连接中…

新兴手机市场集体“失速” 增长预期下调

新兴手机市场集体“失速” 增长预期下调!2025年已经过去了五个月,全球智能手机市场的预期持续下调。年初对市场看涨的预测如今已大幅降低。即便去年开始在终端落地的AI技术,也暂未对消费市场产生明显刺激。IDC最新研究报告显示,由于高不确定性、关税波动以及许多地区的通货…

有创意!太原70岁老太太用玉树嫁接长寿花走红

在太原的一个老小区里,住着一位70岁的老太太,姓王,邻里街坊都喊她“王奶奶”。这段时间她在小区里可算是火了一把,原因就是她那几盆“嫁接玉树”,一看就让人忍不住多瞧几眼。仔细一看,才发现不只是玉树——它的枝干上,竟然开着一串串色彩艳丽的长寿花,红的、粉的、橙的…

Posix API

Posix API与网络协议栈 Posix API与网络协议栈socketbindlistenacceptconnectrecv和send 整个网络之间的通信贯穿起来都离不开网络协议栈这个东西,网络协议栈主要负责主要负责网络间数据的通信,自顶向下可分为五层:应用层,传输层&…

Flask+LayUI开发手记(七):头像的上传及突破static目录限制

看了看,上篇开发手记是去年8月份写的,到现在差2个月整一年了。停更这么长时间,第一个原因是中间帮朋友忙一个活,那个技术架构是用springboot的,虽然前端也用layUI,但和Flask-python完全不搭界,所…

第一篇:揭示模型上下文协议(MCP):AI的通用连接器

模型上下文协议(MCP)是 Anthropic 于 2024 年末推出的一项开放标准,旨在彻底改变人工智能(AI)模型与外部数据源及工具的连接方式。它被誉为 AI 应用的“USB-C 接口”,其核心目的是标准化 AI 助理与数据所在…

(九)学生写作画像可视化

在上次报告中提到的无法正确识别登录状态的问题已经解决,现在调用后端api时可以正确load_user并得到登录状态。 登录状态问题解决后,本次主要实现的是学生写作画像的数据可视化,学生可以登陆后查看自己之前的作文列表与历史各维度得分&#x…

国家能源集团称从未设拓展中心 警惕假冒机构

国家能源集团称从未设拓展中心 警惕假冒机构。国家能源集团近期发现有不法分子假冒其名义在全国多地设立所谓“拓展中心”,涉嫌从事违法活动,并通过抖音、微信视频号等网络平台进行虚假宣传。对此,国家能源集团发布严正声明,强调从未在全国任何地区设立任何“拓展中心”或“…

官方证实!美国停止对华芯片设计软件(EDA)销售 打压“中国芯”再升级

面对中国在先进芯片领域取得的重大突破,美国特朗普政府将目光转向了设计芯片的软件,试图借此打压“中国芯”。英国《金融时报》5月28日报道称,美国政府已采取措施限制向中国出售此类产品。美国彭博社也报道了类似消息,称美国商务部工业与安全局已致函部分头部美国电子设计自…

乌称对俄军机发动大规模袭击 摧毁41架战略轰炸机

俄乌第二轮谈判定于6月2日举行。谈判前夕,乌克兰声称对俄罗斯实施了一次特别行动,摧毁了41架俄战略轰炸机。然而,俄媒认为乌方宣称的战果并不符合实际。乌克兰国家安全局在社交媒体上表示,6月1日晚对俄罗斯发起了一次代号为“蛛网”的特种作战行动,袭击了俄军的战略轰炸机…

离婚,失业,失亲……她40岁后的人生那么难?美丽无关年龄

离婚,失业,失亲……她40岁后的人生那么难?美丽无关年龄!美丽与年龄无关,即便他人不再认同你。都说年龄是女人最大的秘密,尤其是生儿育女之后,“衰老”这个词便成了女人内心最大的恐惧和痛处。如今,三八妇女节甚至被迫更名为“三八女神节”,以消除称呼上的忌讳。然而,…

巴西登革热疑似及确诊病例超143万 疫情严峻引发关注

巴西卫生部发布消息称,截至6月2日,今年该国登革热疑似及确诊病例已达到1430300例,死亡病例为1075例,另有818例疑似死亡病例正在调查中。圣保罗州、米纳斯吉拉斯州和巴拉那州是目前巴西登革热疫情最为严重的地区。责任编辑:zhangxiaohua

四川古蔺警方通报7人殴打未成年人 误会引发暴力事件

四川古蔺县警方于6月2日通报了一起涉及未成年人的暴力事件。据报道,两名未成年人在骑车时发出笑声,被15岁的陈某甲误以为是在嘲笑自己。随后,陈某甲与其他六人一起在地下停车场对这两名未成年人进行了殴打。目前,七名涉案人员均已被警方抓获,其中两人因涉嫌犯罪被刑事拘留…

多位男星减肥成功 压力已给到沈腾 贾冰瘦身引热议

5月31日,贾冰的妻子发布了一段视频,并配文“从此我家多了个瘦子”。在两人合影中,贾冰明显瘦了很多。评论区里大家纷纷询问他如何瘦下来的,甚至有人表示瘦得认不出来了。贾冰的妻子回复说,主要是通过少吃(一天只吃一顿)和运动来减肥的。贾冰在评论区幽默地回应说:“一次…

任务25:绘制全局时间线(TimeLine)

任务描述 知识点: DjangoECharts时间线图重 点: ECharts时间线图内 容: 参考ECharts官网示例创建timeline.js,绘制时间线图引入js文件,并调用绘图函数时间线图形配置项微调任务指导 1、参考ECharts官网示例:(https://echarts.apache.org/examples/zh/index.html),…

2025年渗透测试面试题总结-青藤云[校招]红队攻防岗(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 青藤云[校招]红队攻防岗 1. 数据库提权 2. Redis计划任务提权 3. 绕过杀软执行数据库命令 4. SQL Server…

HCIP:MPLS LDP的原理和配置

目录 一、MPLS LDP的原理 1.回顾MPLS 2.MPLS LDP的基本概念 3.LDP的工作过程主要分为两部分 ​4.LDP会话: 5.LDP的对等体 6.LDP的消息 7.LDP工作原理 8.标签的发布和管理 二、MPLD LDP的实验配置 1.配置IP地址和OSPF 2.配置MPLS LDP 3.查看各个设备的…

这个地级市,“含潮量”全国顶流? 潮玩之都的转型之路

这个地级市,“含潮量”全国顶流? 潮玩之都的转型之路!东莞市中心矗立着一座12米高的巨型潮玩雕塑“劳拉”,其轮廓以彩色线条勾勒,充满科幻感。这座2021年落成的城市新地标脚下,延伸出一条由设计工作室、潮玩展销中心和沉浸式体验馆串联的“潮玩大道”。这里不定期举行沙龙…