java 抽象类与接口对比

java面试常见面试题:

抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口

抽象类与接口

抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。

 

  • 1.普通成员变量:抽象类中可以有普通成员变量,接口中没有普通成员变量(static final变量);
  • 2.方法:抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法;  
  • 3.静态成员变量:抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。    
  • 4.静态方法:抽象类中可以包含静态方法,但不能是抽象静态方法;接口中不能包含静态方法(静态的方法不能被覆写)  
  • 5.构造方法(静态的):抽象类可以有构造方法,接口中不能有构造方法;
  • 6.方法访问权限:抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。 
  • 7.子类实现和继承: 一个类可以实现多个接口,但只能继承一个抽象类。  

JDK8 新特性

接口默认方法

默认方法是在接口中的方法签名前加上 default 关键字的实现方法。

在Java 8之前,接口与其实现类之间的耦合度过高,当需要为一个接口添加方法时,所有的实现类都必须随之修改。默认方法可以为接口添加新的方法,而不会破坏已有的接口的实现。

接口默认方法的继承分三种情况:

1. 不覆写默认方法,直接从父接口中获取方法的默认实现。
2. 覆写默认方法,这跟类与类之间的覆写规则相类似。
3. 覆写默认方法并将它重新声明为抽象方法,这样新接口的子类必须再次覆写并实现这个抽象方法。

接口静态方法

interface InterfaceA {
    default void foo() {
        printHelloWorld();
    }
    
    static void printHelloWorld() {
        System.out.println("hello, world");
    }
}

public class Test {
    public static void main(String[] args) {
        InterfaceA.printHelloWorld();
    }
}

 default关键字只能在接口中使用(以及用在 switch语句的default分支),不能用在抽象类中;接口默认方法不能覆写Object类的equals、hashCode和toString方法;接口中的静态方法必须是public的,public修饰符可以省略,static修饰符不能省略。
 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值