Java接口一文解析

Java接口

1.接口介绍

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口有助于我们统一规范。在接口中指定统一的方法名和属性名,让类实现方法,能规范化代码,减少不统一的方法头带来的损耗。

public interface UsbInterface {//接口,用于指定规范
    //规定接口的相关方法
    public void start();
    public void stop();
}

2.接口特性

  • 接口中所有的方法都会被隐式指定为public abstract,所有的变量都会被隐式指定为public static final变量。
interface Interface_{
    int n1 = 10;//完整语句为public static final int n1 = 10; 
    public void hi();//完整语句为public abstract void hi();
}
  • 接口中定义的方法是不能再接口中实现的,只能由实现接口的类来实现接口中的方法。(注意:此处的方法不包含下面的默认实现方法和静态方法)
  • jdk8后,接口中可以有默认实现方法和静态方法。
interface Interface_{
    //在jdk8 后, 可以有默认实现方法,需要使用default关键字修饰
    default public void ok(){
        System.out.println("ok.........");
    }
    //在jdk8后,可以有静态方法
    public static void cry(){
        System.out.println("cry..........");
    }
}

默认实现方法和静态方法的调用:

class A implements AInterface{
    @Override
    public void hi() {
        //子类中可以直接调用父类接口默认方法
        AInterface.super.ok();
        //调用父类静态默认方法
        AInterface.cry();
    }
}

3.接口与类的相似点与区别

(1)相似点

  1. 接口和类都能有多个方法
  2. 接口和类一样,都存在多态传递现象

(2)区别

  1. 接口不能实例化对象,类可以
  2. 接口没有构造器,类必须要有构造器
  3. 接口中所有的方法必须是抽象方法(除了默认实现方法和静态方法)
  4. 接口不能包含成员变量(除了static 和 final 变量)
  5. 接口不是被类继承,而是要被类实现
  6. 接口支持多继承,类只能够单继承,但类可以实现多个接口

(3)接口与抽象类的区别

  1. 抽象类中的方法可以有方法体,接口中的方法不行

    abstract class abstract_{
        public void say(){}//{}为方法体
    }
    
    interface Mytools{
        public void say();//接口方法不能有方法体
    }
    
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。

  3. 抽象类可以有静态代码块和静态方法,接口不能有静态代码块,但静态方法在jdk8以后可以有。

  4. 实际应用时,什么情况选择使用接口?

抽象类是对事物的抽象,它包含属性和行为(方法)的抽象,而接口是对行为的一种抽象。比如飞机和鸟没有共同的属性,但是他们有共同的行为——都能够飞。而飞机本身有很多种,像战斗机、客机等,这时候我们可以将他们的共有属性——比如说引擎,作为抽象类。

总的来说,什么情况应该使用接口——

  1. 需要实现多态
  2. 要实现的方法(功能)不是当前类族的必要(属性)
  3. 要为不同类族的多个类实现同样的方法(功能)

4.接口简单实例

interface UsbInterface {//接口,用于指定规范
    //规定接口的相关方法
    public void start();
    public void stop();
}
// Phone 类实现 UsbInterface 接口规定/声明的方法
class Phone implements UsbInterface{
    @Override
    public void start() {
        System.out.println("手机开始工作");
    }
    @Override
    public void stop() {
        System.out.println("手机停止工作");
    }
}

class Computer {
    //传入参数为实现接口的类
    public void work(UsbInterface usbInterface){
        //通过接口,来调用方法
        usbInterface.start();
        usbInterface.stop();
    }
}

public class Interface01 {
    public static void main(String[] args) {
        Phone phone = new Phone();

        //创建计算机
        Computer computer = new Computer();
        computer.work(phone);//输出:	手机开始工作	手机停止工作
    }
}

5.接口的继承

在Java中,类的多继承是不合法,但接口允许多继承。

public interface AInterface {
    public void hi();
}

interface UsbInterface {
    public void start();
    public void stop();
}

interface Mytools extends UsbInterface, AInterface{
    public void say();
}

class exercise_ implements Mytools{
    //该类需要实现三个接口的所有方法
    @Override
    public void hi() {
    }
    
    @Override
    public void say() {
    }
    
    @Override
    public void start() {
    }
    
    @Override
    public void stop() {
    }
}

6.接口引用指向实现该接口的对象

我们清楚接口是不可以被实例化, 但是接口引用可以指向1个实现该接口的对象.

public class exercise_ {
    public static void main(String[] args) {
		A a = new B();//类比向上转型
       	B b = (B)a;//类比向下转型
    }
}
interface A{}
class B implements A{}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值