JAVA8新特性下的接口和抽象类的异同

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012273935/article/details/79779312

首先是相同的地方:

1.接口和抽象类都能定义方法和属性。

2.接口和抽象类都被看作是一种特殊的类。大部分的时候,定义的方法要子类来实现

3.接口和抽象类都可以不含有抽象方法。接口没有方法就可以作为一个标志。比如可序列化的接口Serializable,没有方法的接口称为空接口。没有抽象方法的抽象类,笔者暂时不知道有什么用,但也可以通过编译。

4.接口和抽象类都不能创建对象。

5接口和抽象类都能利用多态性原理来使抽象类引用指向子类对象。

6.继承抽象类和实现接口的子类(假设子类不是抽象类)要重写所有的抽象方法,继承抽象类的子类中若存在没有重写的抽象方法就继续作为抽象类,要加abstract修饰。实现接口的子类中若存在没有重写的抽象方法,也要变为抽象类。

7.接口和抽象类中可以含有静态代码块和静态方法

下面是接口和抽象类的不同点:

1.接口能够实现多个,而抽象类只能单独被继承。

2.属性上,抽象类可以用各种各样的修饰符修饰。而接口的属性是默认的public static final。

3.方法上,抽象类的方法可以用abstractpublic或者protected修饰。而接口默认为public abstract修饰。抽象类的方法可以有需要子类实现的抽象方法,也可以有具体的方法。而接口在老版本的jdk中,只能有抽象方法,但是Java8版本的接口中,可以带有默认方法。抽象类可以含有构造方法,接口则不能。

4.设计层面上,抽象类表示的是子类“是不是”属于某一类,接口则表示“有没有”特性“能不能”做这种事。如飞机和鸟都能飞,但是他们在设计上实现一个Fly接口,重写fly()方法。远比两个类继承飞行物抽象类好得多。因为,飞机和鸟有太多的属性不一样。另外一点,抽象类可以是一个模板,因为可以自己带集体方法,所以要加一个实现类都能有的方法,直接在抽象类中写出并实现就好,接口在以前的版本则不行。

5.Java8中接口中的默认方法可以被多重继承。而抽象类不行。另外,接口只能继承接口。而抽象类既可以继承普通类和抽象类,也能继承接口。


猜你喜欢

转载自blog.csdn.net/u012273935/article/details/79779312