1️⃣什么是抽象类?
注意事项
抽象类的使用场景
特征和注意事项
final和abstract是什么关系?
2️⃣接口的定义与特点
接口的用法
接口和接口的关系
接口多继承的作用
接口的注意事项
3️⃣抽象类和接口区别
4️⃣抽象类和接口的共同点
在Java中abstract是抽象的意思,可以修饰类、成员方法。
abstract修饰类,这个类就是抽象类;abstract修饰方法,这个方法就是抽象方法。
为什么抽象类不能创建对象呢?
可以用反证法来验证,假设抽象类可以创建对象,但是在调用方法时就会报错,因为调用的方法连方法体都没有!因此抽象类不能创建对象
答案是互斥关系。
原因主要有以下两个方面:
接口的格式如下:
接口中的变量默认用public static final修饰
接口中方法默认用public abstract修饰
接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类。
接口可以被类单实现,也可以被类多实现。
类和类的关系:单继承。
类和接口的关系:多实现。
接口和接口的关系:多继承,一个接口可以同时继承多个接口。
规范合并,整合多个接口为同一个接口,便于子类实现。
即:在开发设计的过程中,一个类同时实现多个接口,看起来比较繁琐
因此就有了如下设计:
让一个接口A继承多个接口,然后再由类实现接口A就可以了
1.接口中所有的方法不能有具体的实现,即接口中的方法都是抽象方法。
2.接口必须通过类来实现它的抽象方法
3.接口不能创建对象
4.一个类实现多个接口,多个接口中有同样的静态方法时不冲突
【原因是:接口中的方法只能接口自己调用】
5.一个类继承了父类,同时又实现了接口,当父类中和接口中有同名方法时,默认用父类的。
举个例子:
public class text4 {
public static void main(String[] args) {
Cat cat=new Cat();
cat.eat();
}
}
class Animal{
public void eat(){
System.out.println("父类中的eat方法");
}
}
interface Food{
default void eat(){//使用default修饰的接口方法,可以拥有方法体,实现类不需要重写,可以被实现类继承,该特性是Java8以后被提出
System.out.println("接口中的eat方法");
}
}
class Cat extends Animal implements Food {
}
运行结果:
从语法层面来说:
1、抽象类可以提供成员方法的实现细节,而接口中只能存在抽象方法
2、抽象类中成员变量可以是多种类型,接口中成员变量必须用public static final修饰
3、一个类只能继承一个抽象类,但可以实现多个接口
4、抽象类中允许含有静态代码块和静态方法,接口不能
从设计层面而言:
1.抽象类是对整一个类的属性,行为等方面进行抽象,而接口则是对行为抽象。就好比飞机和鸟,抽象类抽象出的是飞行物类。而接口则是抽闲出飞行方法。
2.抽象类是一个模板式的设计,当在开发过程中出现需求更改的情况,只需要更改抽象类而不需要更改它的子类。
接口是一种辐射性设计,当接口的内容发生改变时,需要同时对实现它的子类进行相应的修改。
接口和抽象类又很像,它们都具有如下共同的特征: