面向对象三大特征之继承

面向对象三大特征之继承


前言

继承主要解决的问题是:共性抽取
继承关系当中的特点:

1、子类可以拥有父类的内容
2、子类还可以拥有属于自己的内容 定义父类的格式:
(就是一个普通的类定义) public class XXX{}
定义子类: public class 子类名称 extends 父类名称

一、继承类中成员变量的访问特点

在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式 直接通过子类对象访问成员变量:
对象是谁就优先用谁的,没有则向上找(子类父类成员方法重名,优先子类,子类没有则向上找父类) 间接通过成员方法访问成员变量:
该方法属于谁,就优先用谁,没有则向上找。

变量重名

局部变量: 直接写变量名
本类的成员变量: this.成员变量名
父类的成员变量名:super.父类变量名

二、继承中成员方法的访问

在父子类的继承关系当中,创建子类对象。访问成员方法的规则:
创建的对象是谁,就优先找谁,如果没有则向上找。

注意事项:
无论是成员方法还是成员变量,如果没有,都是向上找父类,绝对不会向下找 子类。

方法的重写:(override)

概念:在继承关系当中,方法名称一样,参数列表也一样
而重载(overload):方法名称一样,参数列表不一样

方法覆盖重写的注意事项:
1、保证父子类之间的方法名称与参数列表完全相同,@overrride写在方法前面,用来检测是不是有效的正确覆盖重写 但是这个注解就算是不写,满足覆盖重写条件也是正确的覆盖重写。
2、子类的方法返回值必须小于等于父类方法返回值的范围 Object 类是所有类的公共最高父类(祖宗类)。
3、子类方法的权限必须大于等于父类方法的权限修饰符。
备注:public>protected>(default)>private
(default)代表没有修饰符,代表什么都不写,不属于关键字。

三、继承中构造方法的访问特点:(父类有构造方法子类也需要有构造方法)

列如创建子类实列:
Zi z=new Zi() 先调用父类无参构造,再调用子类无参构造

1、子类构造方法当中,有一个默认隐含的super()调用,所以一定是先调用父类构造,再调用子类构造。
2、可以通过super关键字可以调用父类重载构造方法。
3、super的父类构造调用,必须是子类构造方法的第一个语句,不能一个子类构造调用多次super构造。

总结:
子类构造方法必须调用父类构造方法,不写会自动赠送一个super(),一个构造方法只能有一个super调用。

super关键字的用法

1、在子类成员方法中访问父类的成员变量
2、子类的成员方法中访问父类的成员方法
3、在子类的构造方法中,访问父类的构造方法

this关键字的三种用法

1、在本类的成员方法中访问本类的成员变量
2、在本类的成员方法中,访问本类的另一个成员方法
3、在本类的构造方法中,访问本类的另一个构造方法
(本类的无参构造,调用本类的有参构造是方法的重载)
注意: this(…);
必须得是第一个语句,所以super和this两种构造调用不能同时使用

四、继承的三个特点

java语言是单继承的:一个类的直接父类只能有一个。
java语言可以多级继承:父类还可以有父类(jave中食物链顶端的人java.lang.Object所有类的祖宗)。
一个子类的父类是唯一的,但是一个父类可以有多个子类。

扩展

抽象的概念

大范围,没有具体的方法
抽象方法:加上abstract关键字然后去掉{}
抽象方法必须在抽象类里面。。。
抽象类也是加上abstract关键字:
public sbstract clss Demo{}

如何使用抽象方法:
1、不能直接创建抽象类对象
2、必须要一个子类来继承抽象类
3、子类必须覆盖重写抽象父类当中所有的抽象方法
覆盖重写的实现:去掉abstract关键字然后加上大括号

注意事项:
1、抽象类不能直接创建对象
2、抽象类可以有构造方法,只能通过子类当中的super()执行,无法通过创建对象执行。
3、一个抽象类当中不一定有抽象方法,但是一个抽象方法一定在一个抽象类当中。
4、子类必须覆盖重写抽象父类的所有抽象方法,如果不这样,子类也必须是一个抽象类。

相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页