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 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号