day07继承, final修饰 ,抽象类,接口

/*
将学生和工人的共性描述提取出来,单独进行描述
只要让学生和工人与单独描述这个类有关系,就可以了

继承:
1.提高了代码的复用性

2.让类与类之间产生了关系,有了这个关系,就有了多态的特性

注意:千万不要为了获取其他类的功能,简化代码而继承
必须类与类之间有所属关系才可以继承,所属关系is a

找到共性部分抽取出来

java语言中:java只支持单继承,不支持多继承

因为多继承容易带来安全隐患:当多个父类中定义了相同功能,当功能不同时
子类对象不确定要运行哪一个
但是java保留这种机制,并用另一种体现形式来完成表示多实现

java支持多层继承,也就是一个继承体系

如何使用一个继承体系的功能

想要使用体系,先查阅体系父类的描述,因为父类中定义是该体系共性功能
那么这个体系基本可以使用
那么在具体调用是,要创建最子类的对象,为什么
一是有可能父类不能创建对象抽象接口
二是创建子类对象可以使用更多功能基本的和特有的

简单一句话:查阅父类功能,创建子类对象使用功能


注意:    聚集:has a 有什么

聚合:球员是球队的一部分

组合:手和心脏是身体一部分


子父类出现后 类成员的特点

类中的成员:
1.变量
2.函数
3.构造函数


1.变量
如果子类中出现非私有的同名成员变量时
子类要访问本类的变量,用this
子类要访问父类中的同名变量,用super

super的使用和this的使用几乎一致
this代表是本类对象的引用
super代表父类对象引用


2.字父类中的函数

当子类出现和父类一模一样的函数时
当子类对象调用该函数,会运行子类函数的内容
如同父类的函数被覆盖一样

这种情况是函数的另一个特性:重写(覆盖)

当子类继承了父类,沿袭了父类的功能到子类
但是子类虽具有该功能,但功能内容却和父类不一致
这时,没必要定义新功能,而使用覆盖特殊,保留父类定义的功能,并重新功能内容

覆盖:
子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败

静态只能覆盖静态

记住大家:
重载:只看同名函数的参数列表
重写:子父类方法一模一样


3.子父类中的构造函数

在对子类对象进行初始化时,父类的构造函数也会运行
那是因为子类的构造函数默认第一行有一条隐式语句super()
super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()

为什么子类一定要访问父类的构造函数

因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类
是如何对这些数据进行初始化的
所以子类在对象初始化时,要先访问父类的构造函数
如果要访问父类指定的构造函数,需要手动定义super语句

注意:super语句一定定义在子类的构造函数第一行

子类的实例化过程

结论:
子类的所有的构造函数,都会默认的访问父类中空参数的构造函数
因为子类每一个构造函数内的第一行都有一句隐式super()

当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定访问父类的构造函数

当然,子类的构造函数第一行也可以手动指定this语句来访问本类的构造函数
子类至少会有一个构造函数会访问父类的构造函数

-------------------------------------------------------

final:最终,作为一个修饰符
1.可以修饰类,函数,变量。
2.被final修饰的类不可以被继承,为了避免被继承,被子类复写功能
3.被final修饰的方法不能被复写
4.被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,也可以局部变量
当在描述事物时,一些数值出现时固定的,那么为了增强阅读性,都给这些值起个名字,
而这些名字不需要改变,用final修饰,作为常量,常量的书写规范所有字母都大写,如果由多个单词组成
单词间通过_连接
5.内部类定义在类中的局部位置上,只能访问该局部被final修饰的局部变量

提高了复用性,打破了封装

------------------------------------------------------

当多个类中出现相同功能,但功能主体不同
这是可以进行向上抽取,这时,只抽取功能定义,但不抽取功能主体

抽象:看不懂

抽象类的特点:
1.抽象方法一定在抽象类中
2.抽象方法和抽象类必须被abstract关键字修饰
3.抽象类不可以用new创建对象,因为调用抽象方法没意义
4.抽象类中的抽象方法要被使用,必须有子类复写所有的抽象方法后,建立子类对象调用
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类

抽象类和一般类没有太大的不同
该怎样描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西
这些不确实的部分,也是该事物的功能,需要明确出现,但是无法定义主体
通过抽象方法来表示

抽象类比一般类多了抽象函数,就是在类中可以定义抽象方法
抽象类不可以实例化
抽象类中可以不定义抽象方法,这种做仅仅是不让该类建立对象
由具体的子类实现

---------------------------------------------

接口:初期理解,可以认为是一个特殊的抽象类
当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示
class用于定义类
intface 用于定义接口

接口定义时,格式特点
1.接口常见定义:常量,抽象方法
2.接口的成员都有固定修饰符
常量:public static final
方法:public abstract
记住,接口成员都是public的

接口是不可以创建对象,因为有抽象方法
需要被子类实现,子类对接口中抽象方法全部覆盖后,子类才可以被实例化
否则子类时一个抽象类。

接口可以被类多实现,也是对多继承不支持的一种实现,java多实现
没有方法主体,不冲突,可以被子类任意调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值