接口的使用(Java)


接口是一个特殊的类,主要由全局变量和公共的抽象方法组成,接口可以说是百分之百的抽象类,也就是说,接口中的方法全都是抽象方法(Java8以前),接口通常用来定义一组通用的组件,或者功能模块。

一,接口的基本使用

不同于普通的类,类的关键字是class,接口的是interface

public interface 接口名{
}

和定义类的区别在于,将class关键字换成了interface

1 接口中的成员属性和方法

接口中也有成员属性和方法
所有的成员属性都是 public static final (公共的静态常量)类型
所有的方法都是:public abstract (公共的抽象方法)

public interface Test1 {
    int a = 0;
    void hello();
}

可以省略不写前面的修饰词,接口会默认。
我们去可以测试一下

public class Test {
    public static void main(String[] args) {
        Test1 test1 = new Test1() {
            @Override
            public void hello() {
                System.out.println("hello");
            }
        };
        test1.hello();
        System.out.println(Test1.a);
    }
}

输出结果:
在这里插入图片描述
可以看到a可以直接被类名引用出来,表示为公开的静态变量
如果我们尝试修改a的值
在这里插入图片描述
此时会报错,说明a是被final修饰的值,无法被修改。

2 接口的基本使用

我们需要使用implements关键词去实现接口。

public class getTest1 implements Test1 {
    @Override
    public void hello() {
        System.out.println("我是getTest1中的hello方法");
    }
}

由于接口中的方法是抽象方法,所以在接口实现类中,必须实现接口中规定的方法。

测试结果如下:
在这里插入图片描述
一个类可以实现多个接口,但必须实现所有接口中的方法
在这里插入图片描述

二,函数式接口

就是接口中只有一个抽象方法的接口,称为函数式接口,需要在接口的上方加上@FunctionalInterface 注解
在这里插入图片描述
只要接口只定义了一个抽象方法,那它就是一个函数式接口,还有在上述Java Api中都有个@FunctionalInterface注解,这表示着该接口会设计成一个函数式接口,不符合规范的话,就会编译报错。

三,接口间的相互继承

让Test2接口继承Test1接口

public interface Test2 extends Test1{
    void hello2();
}

在接口实现类中只实现Test2接口

public class GetTest1 implements Test2 {
    //Test1接口中的方法
    @Override
    public void hello() {
        System.out.println("我是Test1中的hello方法");
    }
    //Test2接口中的方法
    @Override
    public void hello2() {
        System.out.println("我是Test2中的hello2方法");
    }
}

实例(上述的具体实现,可以不用看)

原始的手机,可以发短信,通电话。随着发展,手机增加了音频、视频播放、拍照、上网功能。按照作业3的思路和下面的类图进行程序设计:首先,编写类及接口,参照以下类的结构图;其次,编写测试类,让普通手机播放音频、发信息和通电话,让智能手机上网、播放视频、照相、发彩信和视频通电话。在这里插入图片描述
TheakePictures接口:

public interface TheakePictures {
    public void takePictare();
}

PlayWirIng接口:

public interface PlayWirIng {
    public void play(String incontent);
}

NetWork接口:

public interface NetWork {
    public void networkConn();
}

Handset抽象类:

public abstract class Handset {
    private String brand;
    private String type;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
    public void sendInfo(){
        System.out.println("这是一款型号为"+getBrand()+"的"+getType()+"手机:");
    }
    public abstract void call();
    public abstract void info();
}

AptitudeHand实现类:

public class AptitudeHandst extends Handset implements TheakePictures, NetWork,PlayWirIng {
    @Override
    public void call() {
        System.out.println("开始视频通话......");
    }

    @Override
    public void info() {
        System.out.println("发送带图片与文字的消息");
    }

    @Override
    public void networkConn() {
        System.out.println("已开启移动网络");
    }

    @Override
    public void takePictare() {
        System.out.println("咔嚓......拍照成功");
    }

    @Override
    public void play(String incontent) {
        System.out.println("开始播放视频《"+incontent+"》");
    }
}

CommonHandset实现类:

public class CommonHandset extends Handset implements PlayWirIng {
    @Override
    public void call() {
        System.out.println("发送语音通话.........");
    }

    @Override
    public void info() {
        System.out.println("发送文字消息..........");
    }

    @Override
    public void play(String incontent) {
        System.out.println("开发播放音乐《"+incontent+"》.....");
    }
}

测试类:


public class TestIphon {
    public static void main(String[] args) {
        Handset handset = new CommonHandset();
        CommonHandset comm = (CommonHandset)handset;
        comm.setBrand("G502c");
        comm.setType("索尼爱立信");
        comm.sendInfo();
        comm.play("热血");
        comm.info();
        comm.call();
        handset = new AptitudeHandst();
        AptitudeHandst apt = (AptitudeHandst)handset;
        apt.setBrand("HTC");
        apt.setType("I9100");
        apt.sendInfo();
        apt.networkConn();
        apt.play("小时代");
        apt.takePictare();
        apt.info();
        apt.call();

    }
}

输出结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值