2021.01.07 第一阶段04

一、继承

(一)继承的概述
1、让类与类之间产生关系,父子关系
2、关键字:extends,含义:继承、扩展、增加
3、父类和子类:
(1)父类:被继承的类,超类、基类
(2)子类:继承其他类的类,派生类
(二)继承的好处和弊端
1、好处:
(1)提高了代码的复用性
(2)提高了代码的可维护性

2、弊端:
(1)代码的耦合度变高了
(2)耦合度:代码与代码之间关联的紧密程度
3、开发原则:高内聚、低耦合、代码复用性高
(1)高内聚:一段代码或者一个模块具有独立且不依赖外界的业务逻辑
(2)低耦合:模块与模块、功能与功能之间关联紧密程度低
(4)代码复用性高:一段代码在其他位置也能正常使用
(三)继承的注意事项
1、父类中私有的成员不能被继承
父类中的一些私有成员不能被在子类中使用
特别的,私有成员变量,实际上子类是继承了的,但是在子类以及其他位置,没有任何直接的访问手

2、父类的构造方法不能被继承
(1)语法的角度:构造方法必须和所在类型名称保持完全一致,如果能被继承,构造方法的名称首先
就无法确定了
(2)内存的角度:创建一个类型的对象,JVM会自动调用对应类型中对应的构造方法,如果构造能被
继承,创建子类对象的时候,调用了继承的构造,那么将来对象到底属于父类还是子类就无法说明了
(3)虽然构造方法不能被继承,但是子类有一些手段,可以访问父类构造
3、继承的设计思路:要满足“is a”的关系,即子类是父类的一种
(四)Java语言中继承的特点
1、Java支持单继承,不支持多继承,支持多层继承
(1)单继承:一个子类只能有一个父类【亲爹】
(2)多继承:Java不支持。一个子类可以继承多个父类
(3)多层继承:C类继承B类,B类又可以继承A类,这种情况就是多层继承
2、由于多层继承,越是子类,个性的属性和行为越多,越是父类,就只有共性的属性和行为。父类又叫
做基类,因为父类是子类的基础,子类又叫做派生类,是因为子类除了继承父类的共性,还有自己的个

(五)继承中成员变量的关系
1、子父类中不存在重名变量,子类对象既能够访问本类变量,也能够访问父类变量
2、子父类中存在重名变量,子类对象只访问本类变量,不访问父类变量
3、子父类中变量的访问存在就近原则:
当子类的方法中要去使用一个变量,现在方法内部寻找变量定义,如果找不到,就到所属类型找,如
果找到就使用,找不到就到当前类型的父类中找,找到就使用,如果继续找不到,就一直向上找…直到
找到Object类中,如果还没有,就报错。
4、Object类型是Java中所有类型直接或者间接的父类。如果我们自定义一个类型,没有明确说明继承哪
个类,这个类型都会默认继承Object。Object类型没有父类。
(六)this和super关键字详解
1、this:指代当前对象的引用
2、super:指代当前对象的父类引用
3、图示:
在这里插入图片描述
(七)this和super关键字的使用总结
1、含义:
(1)this:指代当前对象的引用
(2)super:指代当前对象的父类引用
2、this和super都能够访问成员变量
(1)this:如果本类有,就直接访问本类成员变量,本类没有再去父类中寻找
(2)super:直接访问父类部分的成员变量
3、this和super都能够访问成员方法
(1)this:如果本类有,就直接访问本类成员方法,本类没有再去父类中寻找
(2)super:直接访问父类部分的成员方法
4、this和super都能够访问构造方法:
(1)this的格式:使用this语句:this();访问本类的构造方法
(2)super的格式:使用super语句:super();访问父类的构造方法
(八)继承中构造方法的关系
1、问题:父类中的私有成员变量,子类对象虽然也具有,但是无法直接访问
2、解决办法一:父类提供公开的getter、setter方法,子类继承,之后实现间接访问
3、解决办法二:父类创建对象的时候,调用本类对应的构造并传参,在本类构造方法中,通过super语
句访问父类的构造方法,并将传入的参数传递给父类对应构造,由父类构造完成赋值
4、当我们在构造方法中,没有手动添加任何super或者this语句,在编译阶段,系统会为我们在构造方
法的第一行自动添加一个super语句,如果我们手动添加了任何super或者this语句,编一阶段就不会再
去添加了
5、super语句专门用于访问父类构造,this语句专门用于访问本类构造

6、this语句和super语句都必须写在构造方法的第一行,所以this语句和super语句不能共存
7、问:this语句或者super语句能不能出现在成员方法中?
答:不能!
原因:(1)this语句和super语句用于访问构造方法,是出现在构造方法中的
(2)当我们创建对象的时候,构造方法由JVM自动调用
(3)构造方法不能手动调用
(4)成员方法必须要手动调用
(5)如果this语句和super语句出现在成员方法中,成员方法要手动调用,就相当于手动调用
了构造方 法,是违背之前知识的,实际上:this语句和super语句只能出现在构造方法中,不能
出现在成员方法中
(九)继承中成员方法的关系
1、在子父类中出现不同名的方法:子类对象既可以直接调用父类方法,也可以调用子类方法
2、在子父类中出现同名的方法:子类调用只会执行子类的方法,不会执行父类的方法

3、子父类中出现了方法声明相同,方法实现却不相同的方法,我们把这种情况称为方法的重写,即在子
类中,用新的方法实现覆盖了父类中旧的方法实现
4、重写:
(1)又叫做:覆盖、覆写,Override
(2)重写的概念:在子父类中,方法名称相同,参数列表相同,与返回值类型有关
① 在子父类中:重写的关系必须发生在子父类关系中
② 方法名称相同:子父类重写的方法名称必须完全一样
③ 参数列表相同:子父类重写的参数列表相同必须完全一样
④ 返回值类型有关:如果父类方法返回值类型是A,子类重写方法的返回值类型只能是A或者A的子
类,不能 是其他情况
(3)注解:@Override,作用:让编译器严格按照重写的语法对方法进行语法检测
5、注意事项:
(1)私有的方法不能被重写
(2)重写方法的访问权限,可以不变,可以越来越大,但是不能越来越小
(3)静态方法不能被重写

二、final关键字

1、final是一个关键字,含义:最终的,不可修改的
2、作用:被final修饰的内容一律不可变
3、final修饰类,类不能被继承
4、final修饰变量,变量变为常量
5、final修饰方法,方法不能被重写
6、常量的定义格式:public static final double PI = 3.141592653589793;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值