每天学一点之继承真不难

继承(Inherit)在这里插入图片描述

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类中无需再定义这些属性和行为,只需要和抽取出来的类构成某种关系。如图所示:
在这里插入图片描述
多个类可以称为子类,也叫派生类;多个类抽取出来的这个类称为父类超类(superclass)或者基类
继承描述的是事物之间的所属关系,这种关系是:is-a 的关系。

继承的好处
  • 提高代码的复用性
  • 提高代码的扩展性
  • 类与类之间产生了关系,是学习多态的前提

弊端:增加了类与类之间的耦合度

1、继承的格式

通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:

【修饰符】 class 父类 {

}
【修饰符】 class 子类 extends 父类 {

}

2、继承的特点

1、子类会继承父类所有的成员变量和方法

  • 当子类对象被创建时,在堆中给对象申请内存时,就要看子类和父类都声明了什么实例变量,这些实例变量都要分配内存。
  • 当子类对象调用方法时,编译器会先在子类模板中看该类是否有这个方法,如果没找到,会看它的父类甚至父类的父类是否声明了这个方法,遵循从下往上找的顺序,找到了就停止,一直到根父类都没有找到,就会报编译错误。

2、子类无法直接使用父类的私有成员
子类虽会继承父类私有(private)的成员变量,但子类不能对继承的私有成员变量直接进行访问(也可以理解为私有的属性不能被继承,官方文档中的说法),可通过继承的公共的get/set方法进行访问。如图所示:
在这里插入图片描述
3、Java只支持单继承

public class A{}
class B extends A{}
//一个类只能有一个父类,不可以有多个直接父类。
class C extends B{} //ok
class C extends A,B… //error

4、Java支持多层继承

class A{}
class B extends A{}
class C extends B{}

顶层父类是Object类。所有的类默认继承Object,作为父类。
子类和父类是一种相对的概念,例如,B类对于A来说是子类,但是对于C类来说是父类

5、一个类可以同时拥有多个子类

class A{}
class B extends A{}
class D extends A{}
class E extends A{}

3、super调用父类构造器

在继承关系中,子类不会继承父类的构造器,子类构造器可以通过**super(【实参列表】)**来调用父类构造器。

  • 子类的每个构造器中默认隐藏super(),即默认调用父类的无参构造器。
  • 子类构造器中可以显示使用super(【实参列表】)来调用父类无参或有参构造器,那么默认隐藏的super()不再存在。
  • 如果父类没有无参构造,则必须在子类构造器中显示使用super(实参列表)来调用父类构造器。
  • super(【实参列表】)只能出现在子类构造器的首行

总之:使用子类任意构造器创建对象时,必须要直接或间接通过super(【实参列表】)先调用执行父类构造器。

4、IDEA中查看类的继承关系

选择一个类名,按Ctrl + H就会显示该类的继承树。
按Ctrl+ Alt+U就会用图形化方式显示C类的继承祖宗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力奋斗的JAVA小余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值