java中接口和抽象类的区别,接口与抽象类的区别

如何理解java的抽象类和接口的区别?

java中接口和抽象类的区别,接口与抽象类的区别


首先,来理解一下抽象类和接口的概念 。众所周知,Java是面向对象的程序语言,而面向对象中的所有的对象,大都是通过类来描述的 。相反,并不是所有的类都适合来描述对象,比如抽象类 。抽象类中没有足够的信息来描述一个具体的对象,所以它是抽象的 。而接口,是高度抽象类型,是抽象方法的集合,接口并不是类,而是对类的一组需求的描述 。
【java中接口和抽象类的区别,接口与抽象类的区别】这些类要遵循接口描述的统一格式来定义 。如果类遵从了某个特定接口,就代表它履行了这项服务 。然后,来理解一下抽象类和接口的相同点 。其一,都不能被实例化 。其二,接口只有在其实现类实现了其中所有的方法、抽象类的子类也都实现了所有的抽象方法后,才可以被实例化 。再然后,来理解一下抽象类和接口的不同点 。抽象类:abstract关键字修饰抽象方法只有声明,无方法体只能继承不能实例化包含抽象方法的类一定是抽象类,但抽象类不一定包含抽象方法抽象类中的抽象方法的修饰符只能是public或者protected,默认为public一个类只能继承一个抽象类子类继承抽象类时,必须实现全部的抽象方法,否则也必须为抽象类可以包含成员变量、成员方法、构造方法;但是构造方法不能用于实例化,只是供子类调用如抽象类Animal,有成员属性name、构造方法:接口:interface关键字修饰方法只能有声明,不能有方法体,默认为public abstract 。
JDK1.8之后,可以有default类型的方法,可以有方法体只能实现不能实例化所有方法只能是public abstract 。JDK1.8之后,可以有default类型的方法,可以有方法体一个类可以实现多个接口可以包含变量,但隐式默认为public static finalJDK1.8中的新特性,新增了默认方法(default):允许接口含有非抽象的方法,但必须用default修饰;default方法可以子类调用,子类也可不比对其实现;如子类实现了多个接口,且这些接口均包含有默认方法,则子类必须重写该默认方法 。
新增了静态方法:允许接口使用static关键字修饰方法并提供实现,即为静态方法;接口的静态方法只能通过接口进行调用,调用方式为:接口名:方法名 。如接口Climb,通用行为climb:举个栗子,Cat类继承Animal、且实现Climb,具有动物特性和攀爬行为:运行一下,看一下调用顺序和结果 。果然,先调用了抽象父类的构造方法,然后是子类的构造方法 。

    推荐阅读