10.面向对象(2)
MODULE 10 面向对象
- 知道继承的好处
- 会使用继承
- 知道继承之后成员变量以及成员方法的访问特点
- 会方法的重写,以及知道方法重写的使用场景
- 会使用this关键字调用当前对象中的成员
- 会使用super关键字调用父类中的成员
- 会定义抽象方法以及抽象类
- 会重写抽象方法
一.继承
(一)什么是继承
1.我们定义了多个类,发现这些类中有很多重复性的代码,我们就定义了一个父类, 将相同的代码抽取出来放到父类中,其他的类直接继承这个父类,就可以直接使用 父类中的内容
2.怎么去继承:extends
子类 extends 父类
3.注意:
(1)子类可以继承父类中私有和非私有成员
(2)构造方法不能继承
4.继承怎么学:
(1)继承不要从是否”拥有”方面来学
要从是否能”使用”方面来学
(二)继承如何使用
1.定义一个父类,在其中定义重复性的代码
2.定义一个子类继承父类 -> extends
子类 extends 父类
3.创建子类对象,直接使用父类中非私有成员
(三)继承中成员的访问特点
1.成员变量
(1)子类和父类中的成员变量不重名
总结:子类可以调用自己的成员变量和父类非私有的成员变量;父类只能 调用父类中的成员变量
(2)子类和父类中的成员变量重名
总结:继承条件下,不管成员变量是否重名,看等号左边是谁,就先调用谁 中的成员,子类没有,找父类(适用于多态)
2.成员方法
(1)方法不重名
(2)方法重名
总结:看new的是谁,先调用谁中的方法,子类没有,找父类(适用于多态)
(四)方法的重写
1.概述:子类中有一个和父类方法名以及参数列表相同的方法
2.前提:继承
3.访问:看new的是谁,先调用谁中的,如果new的是子类,调用子类的重写方法,子 类没有,找父亲
4.检查是否为重写方法:在该方法上写@Override
5.注意事项:
(1)子类重写父类方法之后,权限必须要保证大于等于父类权限(指的是访问权 限)public -> protected -> 默认 -> private
(2)子类方法重写父类方法,方法名和参数列表要一样
(3)私有方法不能被重写,构造方法不能被重写,静态方法不能被重写
(4)子类重写父类方法之后,返回值类型应该是父类方法返回值类型的子类类 型
6.使用场景
(1)功能升级改造,子类需要对父类中已经实现好的功能进行重新改造
二.super和this关键字
(一)继承中构造方法的特点
1.注意:new子类对象时,会先初始化父类(先走父类无参构造方法)
2.原因:每个构造方法的第一行,默认都会有一个super(),不写也会自动提 供,super()代表的是父类无参构造,手动添加必须写在第一行
(二)super和this的具体使用
1.super
(1)概述:代表的是父类引用
(2)作用:可以调用父类中的成员
(3)使用:
A.调用父类构造方法 -> 在子类中的构造中写
super() -> 调用父类无参构造
super(实参) -> 调用父类有参构造
B.调用父类成员变量
super.成员变量名
C.调用父类成员方法
super.成员方法名(实参)
2.this
(1)概述:代表的是当前对象(哪个对象调用的this所在的方法,this就代表哪 个对象)
(2)作用:
A.区分重名的成员变量和局部变量
B.调用当前对象中的成员
(3)使用:
A.调用当前对象的构造:在构造中写
this():调用当前对象的无参构造
this(实参):调用当前对象的有参构造
B.调用当前对象的成员变量
this.成员变量名
C.调用当前对象的成员方法
this.成员方法名(实参)
(4)注意:
Super和this,只要在构造中写,都必须在第一行,所以二者不能同时手写 出来
(三)继承的特点
1.继承只能支持单继承,不能多继承
2.继承支持多层继承
3.一个父类可以有多个子类
4.构造方法不能继承不能重写
5.私有方法可以继承,不能被重写
6.静态方法可以继承,不能被重写
(四)调用被private修饰的成员变量
三.抽象
(一)抽象的介绍
1.抽象怎么来的
抽象共性方法,放到父类中,发现方法没法实现,因为每个子类对此方法的实现 方式细节不一样,此时方法体说不清道不明,可以定义成抽象方法
2.关键字:abstract
3.抽象方法:
修饰符 abstract 返回值类型 方法名(参数);
4.抽象类:
public abstract class 类名{}
5.注意:
(1)抽象方法所在的类一定是抽象类
(2)抽象类中不一定有抽象方法
(3)子类继承父类之后,需要重写父类中所有的抽象方法,不然编译错误
(4)抽象类不能new对象,只能通过new子类对象调动重写方法
6.抽象类可以看成是一类事物的标准,要求只要是属于这一类的,都必须要拥有抽 象类中的方法,必须要给我实现,怎么证明拥有了? -> 重写
至于这个方法怎么实现,就看子类重写之后怎么写方法体了
(二)抽象注意事项
1.抽象类不能直接new对象,只能创建非抽象子类的对象
2.抽象类中不一定非得有抽象方法,但是抽象方法所在的类一定是抽象类
3.抽象类的子类,必须重写父类中的所有抽象方法,除非该子类也是抽象类
4.抽象类中可以有成员变量,构造,成员方法
5.抽象类中可以有构造方法,是供子类创建对象时,初始化父类属性使用的