标题 1.java基础面试题 接口和抽象类的区别
接口和抽象类的理解
这里是引用
含有abstract修饰符的类即为抽象类,抽象类不能创建实例对象。含有抽象方法的类必须定义为abstract class。在abstract class中,方法不必是抽象的,但是抽象方法必须在具体子类中实现,所以,不能有抽象构造方法或抽象静态方法。子类如果没有实现抽象父类中的所有抽象方法,则必须定义为abstract类型。抽象类需要被继承才能使用,而被final修饰的类无法被继承,所以abstract和final是不能共存的。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
接口可以继承接口。
抽象类可以实现(implements)接口。
抽象类可以继承实体类。但和实体类的继承一样,也要求父类可继承,并且拥有子类可以访问到的构造函数。其实Object就是个实体类,Java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的。
抽象类中可以有静态的main方法。
接口和抽象类的区别
1.默认方法:抽象类可以有默认的方法实现,接口中不存在方法的实现,接口是完全抽象的。
2.实现方式:子类使用extends关键字来继承抽象类,如果子类不是抽象类,子类需要提供抽象类中所声明的所有方法的实现。而接口的子类使用implements来实现接口,需要提供接口中声明的所有方法实现。
3.构造函数:抽象类中可以有构造函数,接口中不能。
4.和正常类区别:抽象类不能被实例化,接口则是完全不同的类型。
5.访问修饰符:抽象方法可以有public,protected和default等修饰,接口默认是public,不能使用其他修饰符。
6.多继承:一个子类只能继承在一个抽象类,而一个子类可以实现多个接口。
7.添加新方法:想在抽象类中添加新方法,可以提供默认的实现,因此可以不修改子类现有的代码。如果往接口中添加新方法,则子类中需要实现该方法。
这里是引用
什么时候使用抽象类和接口?
1.如果拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
2.如果想实现多重继承,那么必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此就可以使用接口来解决它。
3.如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。