接口

接口

概述

​ 一系列方法的声明,一些方法特征的集合。一个接口只有方法特征没有方法的实现,这些方法可以在不同地方被不同类实现。

特点

1、interface 表示

2、格式:interface 接口名{}

实例化

​ 多态实现。

实现接口的类

A:抽象类(意义不大)

B:具体类(必须重写所有抽象方法)

成员特点

1、成员变量

​ 只能是静态常量,默认:public static finial

2、构造方法

​ 无。

3、成员方法

​ 只能是抽象方法(1.8之前)。

​ 抽象方法、default(默认方法)、static(静态方法)------1.8之后

default:自动继承、直接调用。

static:接口名.方法名。

代码案例:

interface Person{
    void eat();
    
    void sleep();
    
    /**
     * 接口的默认方法,获取人体的BMI指数
     * @param height    米
     * @param weight    公斤
     * @return
     */
    default float getBMI(float height, float weight) {
        return weight / (float)Math.pow(height, 2);
    }
}

class Student implements Person{

    @Override
    public void eat() {
        System.out.println("学生去食堂吃饭");
    }

    @Override
    public void sleep() {
        System.out.println("学生去宿舍睡觉");
    }
    
}

class Parent implements Person{

    @Override
    public void eat() {
        System.out.println("家长回家吃饭");
    }

    @Override
    public void sleep() {
        System.out.println("家长回家睡觉");
    }
    
}

public class InterfaceSample {
    public static void main(String[] args) {
        Person student = new Student();
        student.eat();
        student.sleep();
        //调用接口的默认方法
        float bmi = student.getBMI(1.83F, 100);
        System.out.println("student的BMI指数 = " + bmi);
        System.out.println("==============================");
        Person mom = new Parent();
        mom.eat();
        mom.sleep();
        System.out.println("mom的BMI指数 = " + mom.getBMI(1.60F, 50));
    }
}

}
其中,Person是一个人类接口,定义了两个普通方法和一个默认方法。而它的子类Student和Parent都必须实现普通方法,默认方法自动继承了,可直接调用。
最后的结果如下:
在这里插入图片描述

接口与抽象类的区别

A:成员区别

1、成员变量

​ 抽象类:可变量,可常量。

​ 接口: 只能是静态常量。

2、构造方法

​ 抽象类:有。

​ 接口:无。

3、成员方法

​ 抽象类:可以抽象、可以非抽象

​ 接口:default(默认方法)、static(静态方法)、抽象方法

B:关系区别

​ 1、类与类:单继承,多层继承

​ 2、类与接口:单/多 实现。

​ 3、接口与接口:单/多继承。

C:理念

​ A:抽象类:“is a” 继承体系的共性功能

​ B:接口:“like a” 继承体系的拓展功能

jdk9新特性

在Interface中编写私有方法时,我们应该遵循以下规则:

  1. **我们应该使用私有修饰符(private)来定义这些方法。
  2. 我们不能同时使用私有修饰符(private)和abstract来定义这些方法。
    “私有”方法意味着完全实现的方法,因为子类不能继承并覆盖此方法。
    “抽象”方法意味着无实现方法。这里子类应该继承并覆盖此方法。
  3. 私有方法必须包含方法体,必须是具体方法。
  4. 这些接口私有方法仅在该接口内是有用的或可访问的。我们无法从接口访问或继承私有方法到另一个接口或类。

总结:Java9为我们提供的新功能——在接口中定义私有方法,对我们有很大的帮助,这将减少重复代码,提高代码的重用性,同时将私有方法写在接口中,不让子类看到,有很好的安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值