Day01-继承与抽象

一.继承

1.继承的概念

**定义:**当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码.

**好处:**把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码的冗余,以此提高代码的可读性

格式:

​ public class 子类 extends 父类{ }

2.继承的特点

2.1继承中成员变量的访问特点

就近原则 :先在局部位置找,本类成员位置找,再到父类成员位置找,逐级往上

子类能继承父类那些内容

img

2.2继承中成员方法调用特点

就近原则:优先执行子类,子类没有执行父类的方法,父类调用时使用super.父类方法(参数)

方法的重写:

当父类的方法不能满足子类现在的需求时,需要对方法重写

注:重写只是对父类方法进行扩展,一定会包含原有的功能

@Override重写注解

好处 : @Override注解可以校验重写是否正确,同时可读性好.

权限修饰符:public>>protected>>默认(缺省)>>private

注:默认与private的区别在于:前者不仅在本类中使用还可以在本类的子类与非子类中使用

img

扩充:重载与重写的区别

方法的重载和重写都是实现多态的方式 ,区别在于重载实现的是编译时的多态性,重写实现的运行时的多态性。

重载是在发生在同一个类中,他们有相同的方法名 ,但有不同的参数列表,重载对返回类型没有特别要求,不能根据返回类型来进行区分 。

而重写发生在不同类中,发生在子类和父类之间的,重写要求子类与父类的被重写方法具有相同的返回类型,名称和参数列表。 但他们的方法体要不同。 同时,父类相较于子类,他的访问修饰符会更加严格,即访问范围更小。比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则) 。

2.3继承中的构造方法

在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造,则默认调用父类无参构造**。**super();

注:因为需要给父类的成员变量初始化。肯定会先把父类的构造执行完毕,在去执行子类构造中的其他代码。

super关键字的用法有三种:
1.在子类的成员方法中,访问父类的成员变量。
2.在子类的成员方法中,访问父类的成员方法。
3.在子类的构造方法中,访问父类的构造方法。

super关键字的用法有三种:
1.在子类的成员方法中,访问父类的成员变量。
2.在子类的成员方法中,访问父类的成员方法。
3.在子类的构造方法中,访问父类的构造方法。

img

注: 1.this不能调用自己,否则会死递归

​ 2.this与super调用的方法不能共存

​ 3.this:代表本类对象的引用

​ 4.super:关键字的标识符

二.抽象类

1.抽象类的定义

1.1抽象类的格式
public abstract class 类{}
1.2抽象方法的格式

​ public abstract 返回值类型 方法名();

2.抽象类的使用原则如下:

(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;

(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;

(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类,抽象类可以继承其他的类.

(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。)

注:外部抽象类不允许使用static声明,而内部的抽象类运行使用static声明。

虚方法表

抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。)

注:外部抽象类不允许使用static声明,而内部的抽象类运行使用static声明。

虚方法表

非private修饰 非static修饰 非final修饰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值