抽象类
概述:
用之前的猫狗、动物举例,动物中不应该具体的东西,而且动物中的吃方法、睡觉方法这些等都不应该也是具体,我们把一个不具体的功能称之为抽象的功能,也叫做抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
example:
特点:
抽象类和抽象方法必须使用abstract关键字修饰
格式:abstract class 类名 {}
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
抽象类不能实例化
那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态
抽象类的子类
要么是抽象类,不需要重写父抽象类的抽象方法
要么重写抽象类中所有的抽象方法,那么这个时候子类是一个具体的类
成员变量:可以是变量,也可以是常量
构造方法:有。可以有构造方法,但是抽象类又不能具体实例化,有什么用呢
用于子类访问父类的初始化
成员方法:可以是抽象方法,也可以不是抽象方法
如果抽象类中包含成员方法是抽象方法,那么就需要强制具体子类去重写
如果抽象类中包含成员方法是非抽象方法,那么继承的子类可以不去调用,提高了代码的复用性
example:
-
一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
抽象类里面可以没有抽象方法
不能创建对象 -
abstract不能和哪些关键字共存
- private 冲突
- final 冲突
- static 冲突
example:
接口
牢记接口是来做额外的动作的,来体现事物的扩展性
接口的特点
接口用关键字interface表示
格式:interface 接口名 {}
类实现接口用implements表示
格式:class 类名 implements 接口名 {}
接口不能实例化
那么,接口如何实例化呢
按照多态的方式,由具体的子类实例化,这也是多态的一种,接口多态
接口的子类
要么是抽象类
要么重写接口中所有的抽象方法
由此可见最常见的是
接口多态
抽象类多态
具体的类多态
一个简单的接口举例:(可以理解为,使用接口,为cat猫类加了一个新的方法)
接口成员的特点:
成员变量:只能是常量,并且是静态的
它里面默认有修饰符:public static final
建议:全部手动给出
构造方法:接口里面没有构造方法
成员方法:只能是抽象方法,没有方法体
默认修饰符是:public abstract
建议:全部手动给出
注意:虽然接口里面没有构造方法,但是,所有的类都默认继承一个类:Object,Object是类Object结构的根,每个class都有Object作为超类,所有对象(包括数组)都实现了这个类的方法
成员接口的成员变量默认修饰符:public static final
成员接口的成员方法默认修饰符:public abstract
- 类与类
继承关系,只能单继承,但是可以多层继承 - 类与接口
实现关系,可以单实现,可以多实现,还可以在继承一个类的同时实现多个接口 - 接口与接口
没有实现关系,只有继承关系,可以单继承,可以多继承
形式参数和返回值
形式参数
- 形式参数:
基本数据类型
引用数据类型:
类:实际上需要的是该类的对象
抽象类
接口
类:实际上需要的是该类的对象 代码举例:
返回值
- 返回值类型:
基本数据类型
引用数据类型
类:当一个类作为返回值类型的时候,需要的是该类的对象
抽象类
接口
感谢阅读!我是酷酷的涛!