抽象类(abstract class)和接口(interface)【Java面试题】

x33g5p2x  于2021-11-02 转载在 Java  
字(1.0k)|赞(0)|评价(0)|浏览(181)

一、抽象类(abstract class)和接口(interface)有什么异同?

不同点:
● 抽象类中可以定义构造器,接口不能;

abstract class A{
    public A(){

    }
}
interface B{
    public B(){

    }
}

● 抽象类可以有抽象方法和具体方法,接口不能有具体方法;

● 接口中的成员全都是 public 的,抽象类中的成员可以使用private、public、protected、默认等修饰;

● 有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法;

● 一个类只能继承一个抽象类,一个类可以实现多个接口;

相同点:

● 不能够实例化;
即使抽象类有构造方法也不行

● 可以将抽象类和接口类型作为引用类型;

● 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类;

abstract class A{
    public abstract void a();
    public abstract void a1();
    public void a2(){
    }
}
interface B{
    void b();
    void b1();
}
public class Test extends A implements B {
    @Override
    public void a() {
    }
    @Override
    public void a1() {
    }
    @Override
    public void b() {
    }
    @Override
    public void b1() {
    }
}

或者

abstract class A{
    public abstract void a();
    public abstract void a1();
    public void a2(){

    }
}
interface B{
    void b();
    void b1();
}

public abstract class Test extends A implements B {

}

二、抽象的(abstract)方法是否可同时是静态的(static), 是否可同时是本地方法(native),是否可同时被 synchronized?

都不能。

● 抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。

● 本地方法是由本地代码(如 C++ 代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。

● synchronized 和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。

相关文章