Java面试题:接口和抽象类有什么区别?

本文将介绍“接口和抽象类有什么区别?”面试题

区别一:实现方式

抽象类的子类使用 extends 来继承,接口则是使用 implements 来实现接口。例如:

(1)抽象类

public abstract class MyAbstract {}
// 继承抽象类
public class Demo extends MyAbstract {}

(2)接口

public interface MyInterface {}
// 实现接口
public class Demo implements MyInterface { }

区别二:构造函数

抽象类可以有构造函数,接口不能有。例如:

public abstract class MyAbstract {
    public MyAbstract(String msg) {
        //...
    }   
}

public interface MyInterface {
    // 错误
    public MyInterface() {
        //
    }
}

在 IDEA 中,提示的错误信息如下图:

Java面试题:接口和抽象类有什么区别?

区别三:main() 方法

抽象类可以有 main() 方法,并且我们能运行它,因为抽象类不能被实例化;接口不能有 main() 方法。如下:

public abstract class MyAbstract {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

public interface MyInterface {

    // 错误
    public static void main(String[] args) {
        System.out.println("Hello World");
    }

}

区别四:实现数量

类可以实现很多个接口;但是只能继承一个抽象类。例如:

import java.io.Serializable;

public class Demo implements MyInterface, Serializable,Comparable<String> {
    @Override
    public int compareTo(String o) {
        return 0;
    }
}

上面类实现了 3 个接口。

import java.util.ArrayList;
public class Demo extends MyAbstract, ArrayList<String> {
    
}

在 IDEA 中,提示的错误信息如下图:

Java面试题:接口和抽象类有什么区别?

区别五:访问修饰符

接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。

public interface MyInterface {
    void show();
}

等价

public interface MyInterface {
    public void show();
}

下面抽象类中的方法定义均合法:

public abstract class MyAbstract {
    public void show1() {}
    protected void show2() {}
    private void show3() {}
    void show4() {}
}
我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习。 —— 列宁
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号