Java的接口

Java 语言中的接口

  • 接口的概念

    • 接口可以理解为一种特殊的类,由全局常量公共抽象方法组成;
    • 通俗理解: 类是一种具体的实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,接口之规定这些类实现它的类里必须提供某些方法;
    • 也就是说,接口其实是一种规范,是用来约束类的。
  • 接口定义

[修饰符] interface  接口名 [extends 父接口1,父接口2...]{
        零到多个**常量**...
        零到多个抽象**方法**....
}
- 常量:
    - 接口中属性是常量,即使我们程序员自己定义时不显示的添加 final修饰符,编译器也会自自动添加;

- 方法:
    - 同上,接口中的方法也只能是抽象方法,即使我们通常不添加 abstract 修饰符,编译器也会自动添加;
  • 使用接口

    • 一个类是可以实现一个或者多个接口的,实现接口使用 implements 关键字。
    • Java中一个类只能继承一个父类,是不够灵活的,Java通过实现多个接口来解决这个问题;

    • 继承父类并实现接口的示例:


    public class SmartPhone extends Telphone implements IPlayGame{
        类体部分...
        //如果继承了抽象类,需要实现继承的抽象方法;
        //也需要实现接口中的抽象方法(接口中的普通方法可以不实现)
    }

  • 描述:
  • 代码示例
    • 定义接口IPlayGame
public interface IPlayGame {
    public void playGame();//接口中的方法不需要实现
}
  • 在SmartPhone类中实现接口IPlayGame
/**
 * Created by xiezhongtian on 2017/8/24.
 * SmartPhone类继承Telphone类并实现接口IPlayGame
 * 通过接口IPlayGame描述两个不同类型的类之间的特征(玩游戏)
 */
public class SmartPhone extends Telphone implements IPlayGame{
    @Override
    public void call() {

        System.out.println("智能机:可以使用种类繁多的APP打电话");
    }

    @Override
    public void sendMessage() {

        System.out.println("智能机:可以通过语音发短信");
    }

    @Override
    public void playGame() {//实现接口中只能手机有玩游戏的特性
        System.out.println("智能机:可以玩游戏");
    }
}
  • 在Psp类中实现接口IPlayGame
/**
 * Created by xiezhongtian on 2017/8/24.
 */
public class Psp implements IPlayGame {
    @Override
    public void playGame() {//实现接口中玩游戏的特性
        System.out.println("Psp:具有玩游戏的功能");
    }
}
  • 通过接口来使用两个不同类的方法
        //接口(Interface)
        IPlayGame iPlayGame1 = new SmartPhone();//接口的引用指向了一个实现了接口的对象
        IPlayGame iPlayGame2 = new Psp();

        iPlayGame1.playGame();
        iPlayGame2.playGame();
  • 输出 两个不同类型对象的共同特性
智能机:具有玩游戏的功能
Psp:具有玩游戏的功能

匿名内部类的方式实现接口

- 接口在使用的过程中,还经常和匿名内部类配合使用
- 所谓匿名内部类,就是指没有名字的内部类
- 多用于关注实现而不关注实现类的名称场景中
  • 语法格式
        /*
        * 匿名内部类实现接口的语法格式:
        * interface i = new interface(){
        *   public void method(){
        *       System.out.println("匿名内部类实现接口的方式!!");
        *   }
        * }
        *
        * */

        //1.常规方法
        IPlayGame iPlayGame3 = new IPlayGame(){
            @Override
            public void playGame() {
                System.out.println("[匿名内部类]:使用匿名内部类的方式实现接口!!");
            }
        };
        iPlayGame3.playGame();

        //2.直接new接口的方式
        new IPlayGame(){
            @Override
            public void playGame() {
                System.out.println("[直接New]:使用匿名内部类的方式实现接口!!");
            }
        }.playGame();

    }

输出:

[匿名内部类]:使用匿名内部类的方式实现接口!!
[直接New]:使用匿名内部类的方式实现接口!!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值