第一章、继承
一、 概述
1、 概念
类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。同时子类也可以定义自己的成员变量和成员方法。
注意:私有的属性和方法不能继承;
2、什么时候使用继承
不能为了继承某个功能而随意进行继承操作, 必须要符合 is a 的关系,例如苹果 is a 水果
3、好处
(1)继承的出现提高了代码的复用性,提高软件开发效率。
例如之前:每个类相同的代码,需要写多次,改的话需要在多个地方改;
(2)继承的出现让类与类之间产生了关系,提供了多态的前提。
4、继承的弊端:
类与类之间的耦合度过高
5、特性
5.1父子类关系
(1)类只支持单继承,不允许多继承,也就是说一个类只能有一个直接父类
(2)多个类可以继承一个父类
(3)多层继承是可以的,即一个类的父类可以再去继承另外的父类
5.2属性
5.3方法
5.4构造方法
二、 使用
1、 语法
格式:
class 子类 extends 父类 {}
2、 成员变量
(1)如果子类父类中出现不同名的成员变量
Fu类中的成员变量是非私有的,子类中可以直接访问,若Fu类中的成员变量私有了,子类是不能直接访问的。
(2)子父类中出现了同名成员变量时
在子类中若要访问父类中的成员变量,必须使用关键字super来完成。super用来表示当前对象中包含的父类对象空间的引用;
在子类中,访问父类中的成员变量格式:
super.父类中的成员变量
3、 成员方法
3.1代码执行过程
当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。
3.2成员方法特殊情况——重写
(一)特征:子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写;
(二)什么时候使用
当一个类是另一个类中的一种时,可以通过继承,来继承属性与功能。如果父类具备的功能内容需要子类特殊定义时,进行方法重写。
(三)注意事项
子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
4、构造方法
(1)在创建子类对象时,父类的构造方法会先执行,为什么?
因为子类中所有构造方法的第一行有默认的隐式super();语句。
(2)子类中的构造方法为什么会有一句隐式的super()呢?
原因:子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。这样,才可以使用父类中的内容。
(3)父类没有无参
方案一为在父类中添加无参的构造方法
方案二为在子类构造方法中显示调用父类的有参构造方法(常常使用),
5.多态的形式
第二章、接口
1、概述
1)是一个标准、规范------------遵守了这个标准,实现类就能干某件事------------API后
2)接口是一种数据类型(引用类型)
2、接口定义
2.1由interface定义
2.2成员的特点:
(1)成员变量:
接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变
(二)接口中可以定义方法,方法也有固定的修饰符,public abstract
3、使用特性
3.1实例化:
接口不能被实例化,就是不能创建对象;
3.2实现类:
必须重写接口中的所有抽象方法,否则是抽象类
3.3继承和实现关系
(1)一个类可以实现多个接口,用逗号隔开;
若又继承又实现时,应先继承后实现
(2)接口可以继承接口
4、类实现接口
类与接口的关系为实现关系,即类实现接口
实现类的方法:
在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑。
5、好处
5.1逻辑上实现多继承
那么想想为什么要定义接口,使用抽象类描述也没有问题,接口到底有啥用呢?
接口最重要的体现:解决多继承的弊端。将多继承这种机制在java中通过多实现完成了。
6、接口和抽象类的区别:
相同点:
l 都不能继承其他类;
l 都不能直接实例化对象;
l 都包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
l (1)方法:
抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
l (2)继承关系:
一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
l (3)应用
抽象类是这个事物中应该具备的你内容, 继承体系是一种 is..a关系
接口是这个事物中的额外内容,继承体系是一种 like..a关系
二者的选用:
l 优先选用接口,尽量少用抽象类;
l 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;