抽象类和接口的区别?
一 接口和抽象类的相似性
1 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。
2 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
二 接口和抽象类的区别
1 (不能为普通方法提供方法体)接口里只能包含抽象方法,静态方法和默认方法(加default),不能为普通方法提供方法实现,抽象类则完全可以包含普通方法,接口中的普通方法默认为抽象方法。
2 .(public static final 赋值)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的,并且必须赋值,否则通不过编译。
3 (是否有构造器)接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。
4 .(不能包含初始化块)接口里不能包含初始化块,但抽象类里完全可以包含初始化块。
5. (继承一个抽象类、多个接口)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
6.
什么时候使用抽象类和接口
如果你拥有一些方法并且想让他们中的一些有默认实现,那么使用抽象类吧。
如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
抽象类和接口在Java编程中具有不同的特点和用途。
1. 抽象类是一种特殊的类,它不能被实例化,只能被继承。
抽象类可以包含普通方法和抽象方法,普通方法可以有具体的实现,而抽象方法没有具体的实现,需要在子类中被重写。
抽象类常用于定义一些通用的属性和方法,但它无法实现多重继承。
2. 接口是一种完全抽象的类型,它只能包含抽象方法和常量。
接口不能被实例化,只能被类实现(implements)。
类实现接口时,必须实现接口中定义的所有抽象方法,否则该类必须声明为抽象类。
接口常用于定义行为契约,确保实现类具备一致的行为。
所以,抽象类和接口的主要区别在于抽象类可以拥有普通方法和构造函数,而接口不能;抽象类通过继承来达到代码重用的目的,接口通过实现来确保一致的行为;一个类可以同时继承抽象类和实现多个接口,但只能继承一个类。
1.接口是行为的抽象,是一种行为的规范,接口是like a 的关系;抽象是对类的抽象,是一种模板设计,抽象类是is a 的关系。
2.接口没有构造方法,而抽象类有构造方法,其方法一般给子类使用
3.接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。
4.抽象体现出了继承关系,继承只能单继承。接口提现出来了实现的关系,实现可以多实现。接口强调特定功能的实现,而抽象类强调所属关系。
5.接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public abstract的。
抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。