java的继承

继承

父类的抽取

​ 在设计类的时候, 可以根据程序中需要使用到的多个具体的类, 进行共性的提取, 定义为父类。
​ 将多个具体的类中相同的属性和行为提取出来到一个类中。
在这里插入图片描述

继承的特点(重点)
产生继承关系后, 子类可以使用父类中的属性和方法, 也可以定义子类独有的属性和方

Java是单继承, 一个类有且只能有一个直接的父类,可以有若干个间接的父类,一个父类可以
有0个或者多个子类,子类之间互不影响
使用继承,可以简化代码,提高代码的复用性,提高代码的拓展性,增加代码的健壮性,最重要
的使类与类之间产生了继承的关系,是多态的前提

继承的语法
继承, 需要使用关键字 extends。 在定义类的时候, 使用 子类 extends 父类 的方式描述继承。
Object类:是java继承体系中所有类的父类,Object类没有父类.

不可以被继承

构造方法
构造方法是为了创建当前类的对象的, 不可以继承给子类。
私有成员
私有成员只能在当前的类中使用, 不可以继承给子类。
注意:父类的私有成员,在子类中可见不可用
跨包子类
默认权限的属性、方法, 不可以继承给跨包的子类。

访问权限修饰符
访问权限修饰符, 就是修饰类、属性的访问级别。
对于类来说:只能有default和public两个修饰符
在这里插入图片描述

方法的重写

原理

​ 子类可以继承到父类中的属性和方法, 但是有些方法, 子类的实现与父类的方法可能实现的不同。 当父类提供的方法已经不能满足子类的需求时, 子类中可以定义与父类相同的方法。
​ 当出现同名方法后,方法如何调用?
这时子类方法完成对父类方法的覆盖, 又叫重写(Override)。

@Override
一个注解, 进行重写前的校验。 校验这个方法是否是一个重写的方法。 如果不是重写的方 法, 会直接报错。

重写的注意事项
方法名字必须和父类方法名字相同
参数列表必须和父类一致
子类方法的访问权限需要大于等于父类方法的访问权限,父类不能是private
子类方法的返回值类型需要小于等于父类方法的返回值类型–引用类型

super关键字
有时候,子类重写父类方法的时候,并不是要对父类的实现全盘推翻,而是对父类方法进行拓
展。

​ 父类方法中的实现仍然需要, 但是还需要在父类方法的基础上进行拓展的实现, 此时就 需要使用super关键字调用父类的方法。
this和super的对比
​ this:是一种引用类型,代表当前对象,保存的是当前对象的地址 super:代表的是当前对象的父类,可以调用父类的成员.但是他不是引用数据类型.

继承中使用构造方法

基本使用
子类对象在实例化的时候, 需要先实例化从父类继承到的部分。 此时通过super()默认调
用父类中的无参构造方法。
注意:super()方法是默认的,不需要显示写出来.

当我们创建构造方法的时候,为什么一定要调用super?

原因:父类中也有属性要进行初始化,而对象的属性必须由自己的构造方法进行初始化,所以必须调用super(),所以每个构造方法中都默认有一个super()

如果父类中没有无参构造方法, 对所有的子类对象实例化都会造成影响, 导致子类对象无法实例化!

类中没有无参构造方法的情况:当我们在类中只写了有参构造方法时,系统不会再自动创建无参构造方法.

解决这个问题有两种方案

​ 1.给父类添加无参构造方法。
​ 2.在子类的构造方法中, 使用 super(参数列表) 调用父类中的有参构造方法。
​ 总结:在继承体系中,作为父类最好的办法就是将无参构造方法和有参构造方法都写了.

为什么要将super放在构造方法的第一行?

在子类的构造方法中有可能用到父类的属性,而属性在使用之前必须先进行初始化,否则无法使用.super的作用是初始化父类的属性,如果在super之前调用了其他的代码,有可能造成在未对父类属性初始化时使用了属性的错误情况发生,所以系统默认super前面不能放任何代 码,this()用于构造方法调用时也要放在第一行是一个道理.

final关键字的使用

是一个关键字;最后的最终的,被final修饰的内容是不能再被改变的。

可以修饰的内容
1.类:final修饰的类不能有子类
2.成员变量:变量是一个终值,不能再被改变.所以在定义时必须先手动给一个值.
3.局部变量:被final修饰的局部变量是一个终值,不能再被改变
4.方法:final修饰的方法不允许重写

空白final

描述:修饰成员变量的一种形式
如果是自定义的类可以在定义时先不给值,但是必须在构造方法中给值,即必须保证属性是被初始化了的.这种情况叫空白final.
优点:空白final在final的使用上提供了更大的灵活性,因为一个类中的final域可以做到根据 对象而有所不同,却又保持其恒定不变的特性.

Object类的使⽤

定义

​ Object类:是java继承体系中所有类的⽗类,Object类没有⽗类.
​ 作为所有类的⽗类,它⾥⾯有11个⽅法,相当于所有⼦类都默认有这些⽅法,所以都很重要.

在这里插入图片描述

常⽤⽅法

equals⽅法
使⽤场景:equals⽅法默认⽐较的是对象地址,在实际应⽤中没有太⼤的实际意义,我们经常需要重写equals⽅法,⼤部分系统类,⾃定义的类,都会通过重写equals,再按照⾃⼰制定的规则进⾏⽐较.⽐如:String字符串类,集合类等

hashcode⽅法
使⽤场景:Object的hashcode⽅法默认返回的是对象哈希码值⼗六进制形式,在同⼀个⼯程内部,我们可以认为是唯⼀的,⼤部分情况会重写它,通过重写改变对象哈希值的计算⽅法.⽐如:集合类

getClass⽅法
使⽤场景:获取对象的字节码⽂件对象,每个类都有唯⼀的字节码⽂件对象.使⽤位置⽐如:反射

toString⽅法
使⽤场景:默认打印的是包名+类名+@+⼗六进制的哈希码值,这些内容对我们的作⽤也不⼤.

​ 后期因为默认内容作⽤⼩,打印时直接写引⽤名字,让操作简单,我们会经常重写toString,⽤来展示对象属性的值.

toString⽅法
使⽤场景:默认打印的是包名+类名+@+⼗六进制的哈希码值,这些内容对我们的作⽤也不⼤.

​ 后期因为默认内容作⽤⼩,打印时直接写引⽤名字,让操作简单,我们会经常重写toString,⽤来展示对象属性的值.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值