为什么不能继承edittext_继承,面向对象编程的基石

作者 | Java圣斗士 | 原创图文,转载请注明出处

全文2000字,阅读大约需要10分钟

3d99d2e017826fb2ce1f5ca7df086eb1.png

哈喽大家好,我是又皮又可爱的Java圣斗士,关注我,每天带你飞!

今天来聊一个基础话题,Java中的继承机制。首先思考什么是继承?如果你不是很懂编程,或者你是一个刚入行不久的小白,又或者你干脆是一个门外汉,那么思考一下生活中,什么是继承?

你可能会想到儿子继承了父亲的财产,嗯,这是一个继承的例子。那么再抽象一些呢?儿子继承了父亲的特性,比如脾气都很暴躁,又或者儿子从父亲那继承了很多为人处世的道理。

是的,从上一代获得的属性或行为叫做继承,在Java中,这样的道理同样适用。来看下面这张继承的关系图:

da1811c0b1f917963d76d25b63bd5863.png

汽车是一个父类,那么作为一种抽象,它可以代表一种交通工具,有四个轮子、有前驱和后驱等特征,可以行使在公路上等行为。那么如果是汽车的子类,就同样具备以上这些特性和行为。

在Java中,通过extends关键字来表示类与类之间的继承关系。如下所示:

public class Car {// 汽车类public void run() { }}public class Benz extends Car {// 奔驰类,继承自汽车类}

为什么要使一个类继承自另一个类呢?原来啊,我们在编写程序的时候经常会书写重复的代码,比如,汽车有run()这个方法,那么如果在代码的某个地方我们需要一个Benz类,它也有run()方法,如果Benz没有继承Car,就必须要在类的内部定义一个run()方法,即便Benz的run()和Car的run()没有任何不同,也要重新书写一遍重复代码。

为了解决这种代码重复的问题,Java通过继承的方式,使子类可以直接调用父类允许子类直接使用的方法或属性,极大的降低了冗余代码。

f665a9e0b5b6f4552ff99914eb2a6450.png

同时,如果你了解extends的英语含义,那么在另一个方面也可以理解继承的含义。

在英语中,extends同样具有“扩展,延伸”的含义,我们说子类可以直接调用父类允许被子类调用的属性和方法,同时对于父类没有但是子类却可以做到的事情,通过在子类中定义父类没有的新方法来达到对父类的扩展。

举个栗子,父亲有一个家族企业,是个小买卖,儿子从父亲那里继承了家族企业,然后把它做大做强,甚至进入世界500强,这就是一种延伸、扩展

这也同样造就了Java语言的多态本领。所谓多态就是子类表现出超出父类的定义范围的不同属性,比如同样是汽车,奔驰和宝马的外形是不一样的,时速等各方面性能也不尽相同,这就是多态的含义。

在Java中,可能是觉得一个儿子只能有一个爸爸,子类只允许继承一个父类

继承的特性

继承有一些规则,包括以下这些:

1、子类可以直接调用父类非private的属性、方法。这个很好理解,private代表私有,如果父类的某个属性或方法是私有的,那么即便是儿子也不能拿走。

2、子类可以定义属于自己的属性和方法,即对父类进行扩展。这个前面也说过了,子类可以对父类的特性和行为进行一定的扩展。

3、子类可以重写父类方法。比如奔驰汽车就可以重新定义run()这个方法,并不会因为它在父类中已经定义就一定要表现出一样的行为,重新定义父类方法在Java中属于Override。

两个重要的关键字

在实现继承的过程中,我们会用到两个非常重要的关键字super和thissuper代表父类对象,this代表子类对象,这也是为什么父类有的时候被加做“超类”的原因,super有“超级”的含义。

在类加载的过程中,子类的构造器会隐式调用父类的构造器,就是通过super关键字来完成的。关于类加载相关的问题,可以参考我之前的文章《最完整类加载顺序总结,只需要这一篇就足够了》。来看下面的代码:

public class Car {String color = "Red";public void run() {System.out.println("汽车在跑");}public static void main(String[] args) {Benz benz = new Benz();benz.run();benz.showCarColor();benz.showBenzColor();}} class Benz extends Car {String color = "Blue";public void run() {super.run();System.out.println("奔驰在跑");}public void showCarColor() {System.out.println(super.color);}public void showBenzColor() {System.out.println(this.color);}}

输出结果:

汽车在跑奔驰在跑RedBlue

好了,综上就是关于Java继承概念的详细解析,你学会了吗?欢迎评论区留言交流,祝所有热爱技术的小伙伴工作顺利哦。

往期精彩:

《如何计算2 * 8?100%的面试官都想要这样的答案》

《如何做到基础扎实?大牛说:玩好JDK》

《教你如何优雅地用Java8 实现日期时间的操作》

《技术新人不知道如何提升自己?教你一招,坚持下去准没错!》

《Java如何处理JSON数据?一篇Jackson教你快速入门》

---欢迎关注【Java圣斗士】,我是你们的小可爱(✪ω✪) Morty---

---专注IT职场经验、IT技术分享的灵魂写手---

---每天带你领略IT的魅力---

---期待与您陪伴!---

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值