2021.4.27:接口

在抽象类中,抽象方法的本质是定义接口规范:规定高层类的接口,保证所有子类都有相同的接口实现。这样,多态就能发挥出威力。

如果一个抽象类没有属性,所有方法都是抽象方法

abstract class Person{
    public abstract void run();
    public abstract String getName();
}

就可以把该抽象class改写为接口interface

声明

关键字:interface

interface Person{
    void run();
    String getName();
}

说明

  • 所谓interface,是比抽象类还要抽象的纯抽象接口,因为它连属性都没有
  • 所有方法默认都是public abstract
  • 当一个class去实现interface时,需要使用implements关键字,且必须实现所有抽象方法
    复制代码
    class Student implements Person{
        private String name;
        public Student(String name){
            this.name=name;
        }
        public void run(){
            System.out.println(this.name+"run");
        }
        public String getName(){
            return this.name;
        }
    }
    复制代码
  • 一个class不能继承自多个类,但却可以实现多个interface
    class Student implements Person,Hello{
        ...
    }

     

接口继承

一个interface可以继承自另一个interface,关键字extends,相当于扩展了接口的方法。

interface Hello{
    void hello();
}
interface Person extends Hello{
    void run();
    String getName();
}

Person接口继承自Hello接口,因此,Person接口现在实际上有3个抽象方法。

 

之前我们讲过,可以定义抽象父类变量,来承接具体子类对象;在学了接口之后,我们可以更进一步,用接口变量,承接具体子类对象

//Person是一个接口
//Student是实现了接口Person的类
//class Student implements Person
Person p=new Student("Lee");
p.run();

以此实现了最高等级的多态。

 

default方法

default接口特有的修饰符,用default修饰接口的某个方法,相当于在接口中实现了一些方法,这些方法就要用default修饰:

复制代码
public class Main {
    public static void main(String[] args) {
        Person p=new Student("Lee");
        p.run();

    }
}

interface Person{
    default void run(){
        System.out.println(getName()+" run");
    }
    String getName();
}

class Student implements Person{
    private String name;
    public Student(String name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
}
复制代码

实现类可以不覆写default方法;default方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要覆写新增方法

default方法与抽象类的普通方法是不同的——因为接口没有属性,所以default方法无法访问属性,而抽象类普通方法可以访问属性

 

总结

  1. 接口没有属性只有抽象方法,比抽象类还抽象的构件;由于所有方法都是抽象方法,所以抽象方法的前缀public abstract可以省去
  2. interface定义接口;某类实现接口时,用关键字implements
    class A implements B{}
    一类不能继承自多个类,但可以继承自多个接口;继承类必须覆写所有抽象方法
  3. 接口可以继承自其他接口,用extends关键字
  4. 更高级的抽象:定义接口变量承接类对象
    interface A{}
    
    class B implements A{}
    
    A a = new B ();
  5. default接口特有方法,接口中用default修饰的方法需要在接口中实现。实现类可以不覆写default方法,其作用是免得在接口中添加方法而导致大量实现该接口类的失效。
  6. 接口中不能实例属性,但是可以有静态属性
posted @   ShineLe  阅读(30)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示