java8新特性之接口

前言:java8之后,接口中的抽象方法可以有方法体,这是一个重大的改变。但我个人很少看到有人使用此特性,不过面试有时候会问到相关的问题

1、接口中public修饰的非静态方法并不能写方法体,protected修饰的方法也不行

在这里插入图片描述

2、接口中没有private修饰的方法

当然,这不属于java8的新特性,这里只是做一个介绍。原因是我们创建一个接口就是为了让类去实现这个接口,而private修饰的方法只属于当前类,不能被实现,这就与定义冲突了。所有接口中没有private修饰的方法

3、default修饰或者public修饰的静态方法可以写方法体

在这里插入图片描述

4、当一个类同时继承类A又实现接口B时,并且A和B中有同名的方法,它会优先调用类中的方法

/**
 * Author: 徐志
 * Date: 2020/8/2 15:39
 */
public interface MyInterface {

    default String getName(){
        return "哈哈";
    }

}
/**
 * Author: 徐志
 * Date: 2020/8/2 15:43
 */
public class MyClass {
    public String getName(){
        return "笨蛋";
    }
}
/**
 * Author: 徐志
 * Date: 2020/8/2 15:43
 */
public class SubClass extends MyClass implements MyInterface {
}

/**
 * Author: 徐志
 * Date: 2020/8/2 15:43
 */
public class Test {
    public static void main(String[] args) {
        SubClass sc=new SubClass();
        System.out.println(sc.getName());
    }
}

运行结果
在这里插入图片描述

5、当一个类同时实现接口A和接口B,并且A和B中方法同名,你需要在类中重写该方法


/**
 * Author: 徐志
 * Date: 2020/8/2 15:39
 */
public interface MyInterface {

    default String getName(){
        return "哈哈";
    }

}
/**
 * Author: 徐志
 * Date: 2020/8/2 17:25
 */
public interface YourInterface {
    default String getName(){
        return "熊大";
    }
}
/**
 * Author: 徐志
 * Date: 2020/8/2 17:27
 */
public class SubsClass implements MyInterface,YourInterface {
    @Override
    public String getName() {
        return MyInterface.super.getName();
    }
}

在这里插入图片描述

/**
 * Author: 徐志
 * Date: 2020/8/2 17:27
 */
public class Test2 {
    public static void main(String[] args) {
        SubsClass sc=new SubsClass();
        System.out.println(sc.getName());
    }
}

在这里插入图片描述

6、接口和抽象类的异同

相同点:

  • 都不能被直接实例化,如果如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象
  • 抽象类里的抽象方法必须全部被子类所实现,子类不能全部实现父类抽象方法,那么该子类还只能是抽象类。一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类

不同点:

  • 抽象类可以继承一个类实现多个接口;接口只可以继承一个或多个接口
  • 接口中的变量默认是public static final修饰。抽象类中的变量为普通变量
  • 接口中的方法默认是public abstract 修饰。抽象类中可以含有非抽象方法
  • 抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为规范

附上本人微信公众号二维码
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值