Java学习之接口2(interface)

接口中的方法实现

上一篇中简单介绍了接口的概念以及定义格式。Java学习之接口1(interface)
接下来,将介绍各种方法的实现过程。
根据上一篇的介绍:类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似于继承抽象父类的方法,格式相仿,只是关键字不同,实现使用 implements 关键字。

格式如下:

class 类名 implements 接口名 {
  //方法体
}

抽象方法

public interface man {   //接口定义
    //定义接口的抽象方法
    //public abstract void sleep();
    public abstract void study();
}
public class oldman implements man {   //接口的实现类的定义
    @Override
    public void study() {     //接口中抽象方法的实现
        System.out.println("活到老、学到老");
    }
}
public class Main {
    public static void main(String[] args) {    //主函数创建对象并调用方法
        oldman an=new oldman();
        an.study();

在这里插入图片描述
总结:
非抽象子类实现接口:

  1. 必须重写接口中所有抽象方法。
  2. 继承了接口的默认方法,即可以直接调用,也可以重写。
  3. 如果实现类没有覆盖重写接口中所有的抽象方法,那么这个实现类本身必须是抽象类。
    (解释:因为如果没有覆盖,则将父类的抽象方法继承下来,则这个子类就包含抽象方法,所以它必须是抽象类,同时,也必须有一个非抽象类来实现这个子类没有覆盖完的抽象方法)

默认方法

默认方法可以被继承,也可以被重写,但是在调用时,只能通过实现类的对象完成。(因为接口不能创建对象)

public interface man {
    //定义接口的默认方法
    public default void study(){    
        System.out.println("人要学习");
    }
    public default void sleep(){
        System.out.println("老人要有充足的睡眠");
    }
}
public class oldman implements man {
    @Override
    public void study() {   //覆盖重写接口的默认方法
        System.out.println("老人也要学习");
    }
}
public class Main {

    public static void main(String[] args) {
        oldman an=new oldman();
        an.study();
        an.sleep();
        }
}

在这里插入图片描述
主函数中创建的是子类的对象,从结果可以看出,study方法输出的是子类的成员方法(因为子类覆盖重写了接口的方法),而成功调用了sleep方法,代码中可以发现,子类并没有sleep方法,所以这是子类继承父类的成员方法。

静态方法

静态与.class 文件相关,只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用。

public interface man {
    //定义接口的静态方法
        public static void eat(){
        System.out.println("人必须得吃饭");
    }
}
public class oldman implements man {
///无法重写静态方法
}
    public static void main(String[] args) {
        //an.eat();
        man.eat();
           }
}

在这里插入图片描述
静态方法和对象无关,至于类有关。

私有方法

如果一个接口中有多个默认方法,并且方法中有重复的内容,那么可以抽取出来,封装到私有方法中,供默认方法去调用。但为了防止其他实现类误用,所以这个共有的方法应该是私有化的。从设计的角度讲,私有的方法是对默认方法和静态方法的辅助。

因此:
普通的私有方法:解决多个默认方法之间的重复代码问题。所以只能由默认方法调用。
静态私有方法:解决多个静态方法之间的重复代码问题。所以只能由静态方法调用。

public interface man {
       ///默认方法调用私有方法
        default void eat(){
        breakfast();
        lunch();
    }
        //定义接口的私有方法
    private void breakfast(){
        System.out.println("早餐要吃好");
    }
    private void lunch(){
        System.out.println("午餐要吃饱");
    }
}
public class Main {
    public static void main(String[] args) {
        oldman an=new oldman();
        an.eat();
    }
}

在这里插入图片描述

另外还有一个内容即常量。接口中的常量和普通的常量用法类似,上一篇中介绍了其用法,可以自行阅读。Java学习之接口(interface)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值