java接口理解

概念:

接口是对类的一组需求描述,这些类需要遵从接口描述的统一格式进行定义

个人理解:

接口是由全局常量和公共抽象方法所组成的,接口是解决java无法使用多继承的手段,接口的实际作用是制定标准.接口就是描述一种能力,而类则必须实现这种能力.接口更像是定义一种规范,方便理解代码

注意事项:

  • 接口不能实例化,接口中不能有构造。
  • 接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
  • 接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
  • 接口中的方法会自动使用public修饰,数据会自动使用public static final修饰
  • 接口关键字interface,接口实现类的关键字implements
  • 接口可以包含静态方法(java SE8)

抽象类和接口

相同之处

  1. 接口和抽象类都不能被实例化
  2. 都位于顶端,用于被其他的类实现和继承
  3. 都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

不同之处

  1. 接口只包含抽象方法、静态方法和默认方法,不能为普通方法提供方法实现;抽象类完全包含普通方法
  2. 接口只能定义静态常量,不能定义普通成员变量;抽象类既可以定义普通成员变量,也可以定义静态常量
  3. 接口不能包含构造器;抽象类可以包含构造器(让抽象类的子类调用这些构造器来完成属于抽象类的初始化操作)
  4. 接口不能包含初始化块;抽象类可以包含初始代码块
  5. 接口可以被多实现;继承只能单继承(包括抽象类)

个人理解:接口是对动作的抽象,抽象类则是对本质的抽象;抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。

默认方法冲突:

1、类中的方法优先级最高,类和父类中声明的方法优先级高于接口;

2、类中无任何声明,子接口的优先级更高,高于任何声明为默认方法的优先级;

3、以上不满足,继承了多接口的类必须通过显示覆盖和调用期望的方法,显式的选择哪种默认方法;

//: 测试接口默认方法的冲突

interface a{
    default String getName() {
        return getClass().getName() + "_" + hashCode() + "   Named";
    }
}

interface b{
    default String getName() {
        return getClass().getName() + "_" + hashCode() + "   Base";
    }
}

public class Test implements a, b{
    //覆盖getName方法
    public String getName() {
        return Named.super.getName();
    }

    public static void main(String[] args) {
        Test t = new Test();
        System.out.println(t.getName());
    }
}

上面如果test类不覆盖getname方法,编译器会报错.

//: 测试接口默认方法的冲突

interface a{
    default String getName() {
        return getClass().getName() + "_" + hashCode() + "   a";
    }
}

class b{
    default String getName() {
        return getClass().getName() + "_" + hashCode() + "   b";
    }
}

public class Test extends b implements a{

    public static void main(String[] args) {
        Test t = new Test();
        System.out.println(t.getName());
    }
}

上面在这种情况下,只会考虑超类方法,接口的所有默认方法都会被忽略.这正是”类优先”原则.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值