面试题之接口和抽象类的区别

一、简介

本文总结最常见的面试题之一:接口和抽象类的区别。

二、区别

如下表所示:

接口和抽象类对比

区别

Interface接口

Abstract class(含有抽象方法的类成为抽象类)

声明方式

interface

abstract

使用方式

implements

extends

修饰符

接口方法默认修饰符是public。你不可以使用其它修饰符。

抽象方法可以有public、protected和default这些修饰符

main方法

接口没有main方法,因此我们不能运行它。(java8以后接口可以有default和static方法,所以可以运行main方法)

抽象方法可以有main方法并且我们可以运行它

特性

1.      接口中的所有变量都是public static final

2.      接口中的所有方法都是抽象方法

3.      可以同时实现多个接口

1.      抽象类可以有抽象方法,也可以没有。可以有普通方法,也可以没有

2.      普通类继承抽象类,必须实现其中的抽象方法,如果不实现,那么必须也是抽象类

3.      一个普通类只能继承一种抽象类

4.      一个抽象类实现了一个接口,可以不实现其抽象方法

实例化

不能实例化

不能实例化

构造函数

接口没有构造方法

抽象类可以用构造方法

成员变量和方法

必须是静态常量和抽象方法,不能含有静态代码块以及静态方法

可以有成员变量和成员方法,可以有静态代码块和静态方法

说明

接口是特征,是对一种行为的抽象,比如,鸟类拥有的特征是飞。

抽象类是内容,是对一种事物的抽象,比如,鸟类是所有鸟的抽象。

使用示例

public interface IStudent {

    public static final String NAME = "ABC";

    public abstract void test();

    default void test1(){

    }

    static void test2() {

    }


}

public abstract class AbsClass {

    private int a;

    public AbsClass(int a) {

        this.a = a;

    }

    public AbsClass() {

    }

    public void test() {

    }

    public abstract void test2();

}

发布了197 篇原创文章 · 获赞 86 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/Weixiaohuai/article/details/103705802