java中的接口

接口
使用关键字interface来定义一个接口,和类的定义方法很相似分为接口声明和接口体。

interface  Printable {
    final int MAX = 100;

    void add();

    float sum(float x, float y);
}

接口体中包含常量的声明(没有变量)和抽象方法两部分。而且接口体中所有常量都是publicf访问权限,而且是static常量(允许省略public、final、static修饰符),所有抽象方法一定是pupblic访问权限(允许省略public、abstract等修饰符)。

interface Printable {
    final int MAX = 100; //public static final int MAX=100;

    void add();      //public abstract void add();

    float sum(float x, float y);
}

实现接口
java中接口由类实现以便使用接口的方法。一个类需要在类声明中使用关键字implements声明该类实现一个或多个接口。如果实现多个接口,使用逗号隔开如:

class A implements B,C  //B,C为接口类

如果一个非抽象类实现了某个接口,那么必须重写这个接口中的所有方法。需要注意的是,由于接口中的方法一定是public abstract方法,所以类在重写接口方法时不仅要去掉abstract修饰符、给出方法体,而且访问权限一定要明显的用public来修饰(否则降低了访问权限,这是不允许的)
如果一个类声明实现一个接口,但没有重写接口中的方法,那么这个类必定是抽象类。也就是说抽象类既可以重写接口中的方法,也可以重写接口中的方法。
java提供的接口都在相应的包中,通过import语句不仅可以引用包中的类,也可引入包中的接口,例如:
import java.io.*;
不仅引入了Java.io包中的类,同时也引入了该包中的接口。
接口基础代码:

import java.awt.*;
import java.io.*;

public class Test {
    public static void main(String[] args) {
        Bus bus101 = new Bus();
        Taxi blueTaxi = new Taxi();
        Cinema redStarCinema = new Cinema();
        MoneyFare fare;
        ControlTemperature temperature;
        fare = bus101;
        bus101.brake();
        fare.charge();
        fare = blueTaxi;
        temperature = blueTaxi;
        blueTaxi.brake();
        fare.charge();
        temperature.controlAirTemperature();
        fare = redStarCinema;
        temperature = redStarCinema;
        fare.charge();
        temperature.controlAirTemperature();

    }
}

abstract class MotorVehicle {
    abstract void brake();
}

interface MoneyFare {
    void charge();
}

interface ControlTemperature {
    void controlAirTemperature();
}

class Bus extends MotorVehicle implements MoneyFare {
    void brake() {
        System.out.println("公共汽车使用x刹车");
    }

    public void charge() {
        System.out.println("公共汽车: 一元/张,不计算公里数");
    }
}

class Taxi extends MotorVehicle implements MoneyFare, ControlTemperature {
    void brake() {
        System.out.println("出租车使用盘式刹车技术");
    }

    public void charge() {
        System.out.println("出租车:2元/公里,起价三公里");
    }

    public void controlAirTemperature() {
        System.out.println("出租车安装了Hair空调");
    }
}

class Cinema implements MoneyFare, ControlTemperature {
    public void charge() {
        System.out.print("电影院:门票,十元/张");
    }

    public void controlAirTemperature() {
        System.out.print("电影院安装了中央空调");
    }
}

接口参数
如果一个方法的参数是接口类型,我们可以将任何实现该接口的类的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法。如:

import java.awt.*;
import java.io.*;
interface  SpeakHello {
    void speakHello();
}
class Chinese implements SpeakHello {
    public void speakHello() {
        System.out.println("中国人习惯问候语:你好,吃饭了吗?");
    }
}
class English implements  SpeakHello {
    public void speakHello() {
        System.out.println("英国人习惯性问候语:你好,天气不错 ");
    }
}
class KindHello {
    public void lookHello(SpeakHello hello) {  //接口回调
        hello.speakHello();                 //接口回调参数
    }
}
public class Test {
    public static void main(String[] args) {
        KindHello kindHello = new KindHello();
        kindHello.lookHello(new Chinese());
        kindHello.lookHello(new English());
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值