抽象类
在java中abstract就是抽象的意思,可以修饰类、成员方法
abstract修饰类、这个类就是抽象类;修饰方法,方法就是抽象方法
修饰符 abstract class 类名{
修饰符 abstract 返回值类型 方法名称 (形参列表);
}
public abstract class Animal{
public abstract void run();
}
注意事项
1 抽象方法只有方法签名,不能声明方法体
2 一个类中如果定义了抽象方法,这个类必须声明为抽象类 否则就会报错
3 一个类继承类了抽象类,n那么这个类必须重写完抽象类的全部抽象方法,否则这个类也要声明为抽象类
4 抽象类作为父类被继承的
抽象的使用场景
抽象类可以理解成不完整的设计图,一般作为父类,让子类来继承
当父类知道子类一定要完成某些行为 但是子类的该行为的实现又不同 ,于是该父类就把该行为定义为抽象方法的形式,具体实现由子类实现,此时这个类就可以声明为抽象类
特这和注意事项
类有的成员(成员变量、方法、构造器、)抽象类全部具有
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
一个类继承类了抽象类,n那么这个类必须重写完抽象类的全部抽象方法,否则这个类也要声明为抽象类
不能用abstract 修饰变量、代码块、构造器
最重要特征 得到了抽象方法就是去类创建对象的能力(不能实例化)
不能和final同时使用 两者定义相反 abstract 修饰类 就是让子类继承重写但是final 修饰的不能被继承 , 在方法 上面abstract 就是让方法被子类重写 final 不让子类重写
使用抽象的好处
提高了代码的复用性
l模板方法已经定义了通用结构,模板方法不能确定的部分定义成抽象方法,交给子类实现,因此,使用者只需要关心自己需要实现的功能即可
接口
接口的定义和特点
格式如下
接口使用关键字interface 来定义
public interface 接口名{
// 常量
// 抽象方法
}
JDK8 之前接口中只能是抽象方法和常量,没有其他
接口不能实例化、
接口作用的成员都是public 修饰的 系统默认
接口是一种规范
接口的用法
接口是用来被类实现(implements)的,实现接口的类称为实现类,可以理解为子类
修饰符 class 实现类 implements 接口1、接口2、.....{
}实现的关键字 implements
接口可以被类单实现 也可以被类多实现
接口的注意事项
一个类实现接口 必须重写完接口的全部抽象方法,否则这个类就需要定义为抽象类
基本小结
类和类的关系:单继承
类和接口关系:多实现
接口和接口关系: 多继承 一个接口可以同时继承多个接口
接口多继承的作用
规范合并 整合多个接口为同一个接口 方便子类实现
使用接口的注意事项
接口不能创建对象
一个类实现对各接口 多个接口的规范不能冲突
一个类继承了父类 同时实现了接口 父类中和接口中有同名方法 默认用父类的
一个类实现了多个接口 多个接口中存在同名的默认方法 不可以不冲突 该类重写该方法即可
一个接口继承多个接口 是没有问题的,如果多个接口中存在规范冲突则不能被多继承