黑马程序员---8、接口

黑马程序员---接口

  1、类实现接口

         在java语言中,接口有类来实现以便使用接口中的方法。一个类需要在类声明中使用关键字implements声明该类实现一个或多个接口。如果实现多个接口,用逗号隔开接口名,如A类实现Printable和Addable接口。

        class A  implements Printable,Addable

       再比如Animal的Dog子类实现Eatable和Sleepable接口。

        class Dog extends  Animal   implements Eatable ,  Sleepable

2、重写接口中的方法

        如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法。需要注意的是,由于接口中的方法一定是public static方法,所有类在重写接口方法时不仅要去掉abstract修饰符、给出方法体,而且方法的访问权限一定要明显的用public来修饰(否则就降低了访问权限,这是不允许的)。实现接口的非抽象类实现了该接口中的 方法,即给出了方法的具体行为功能。

       用户也可以自定义接口,一个java源文件可以由类和接口组成。

3、接口的细节说明

       程序可以用接口名访问接口中的常量,但是如果一个类实现了接口,那么该类可以直接在类体中使用该接口中的常量。

        定义接口时,如果关键字interface前面加上public关键字,就称这样的接口是一个public接口。public接口可以被任何一个类实现。如果一个借口不加public修饰,就称作友好接口,友好接口可以被与该接口在同一个包中的类实现。

       如果父类实现了某个接口,那么子类也就自然实现了该接口,子类不必再显示地使用关键字implements 声明实现了该接口。

       接口也可以被继承,即可以通过关键字extends声明一个接口是另一个接口的子接口。由于接口中的方法和常量都是public的,子接口将继承父接口中的全部方法和常量。

      (注:java提供的接口都在相应的包中,通过import语句不仅可以引用包中的类,也可以引入包中的接口,例如:import     java.io.*;   不仅引用了java.io包中的类,同时也引用了该包中的接口。)

 理解接口

        假如轿车、卡车、拖拉机、摩托车和客车都是机动车的子类,其中机动车是一个抽象类,机动车中有诸如“刹车”、“转向”等方法是合理,即要求轿车、卡车、拖拉机、摩托车和客车都必须具体实现“刹车”、“转向”等功能,但是如果机动车类包含有两个抽象方法“收取费用”和“调节温度”。那么所有的子类都必须要重写这两个方法,即给出方法体,产生各自的收费或控制温度的行为。这显然不符合人们的思维逻辑,因为拖拉机可能不需要有“收取费用”或“调节温度”的功能,而其他的一些类,比如飞机、轮船等可能也需要具体实现“收取费用”、“调节温度”。

       接口的思想在于它可以要求某些类有相同名称的方法,但方法的具体内容(方法体的内容) 可以不同,即要求这些类实现接口,以保证这些类一定有接口中所声明的方法(即所谓的方法绑定) 。接口在要求一些类有相同名称的方法的同时,并不强迫这些类具有相同的父类,比如,各式各样的电器商品,他们可能归属不同的种类,但国家标准要求电器产品必须提供一个名称为on的功能(为达到此目的,只需要求他们实现同一接口,该接口中有名字为on的方法),但名称为on的功能的具体行为由各个电器产品去实现。

        在下面的例子中MotorVehicles类(机动车)的子类Taxi(出租车类)和Bus(公共汽车类)必须有名称为brake的方法(刹车功能),但额外要求Taxi类有名称为controlAirTemperature和charge的方法(有空调和收费功能),即要求Bus只实现一个接口。

      例子:

   


abstract class MotorVehicles{
 abstract void brake();
 
}
interface MoneyFare{
 void charge();
}
interface ControlAirTemperature{
 void controlAirTemperature();
}
class Bus extends MotorVehicles implements MoneyFare{
 void brake() {
 }{
  System.out.println("公共汽车使用新式刹车技术");
 }
 public void charge(){
  System.out.println("公共汽车:一元/一张,不计算公里数");
 }
}
class Taxi extends MotorVehicles implements MoneyFare,ControlAirTemperature{
 //Taxi实现链各个接口
 void brake(){
  System.out.println("出租车使用盘式刹车技术");
 
 }
 public void charge(){
  System.out.println("出租车:2元/公里,起价3公里");
  
 }
 public void controlAirTemperature(){
  System.out.println("出租车安装了海尔空调");
 }
}
class Cinema implements MoneyFare,ControlAirTemperature{
 public void charge(){
  System.out.println("电影院:门票,十元/张");
 }
 public void controlAirTemperature(){
  System.out.println("电影院安装了中央空调");
 }
}

public class Example {
 
 public static void main(String[] args) {
  Bus bus101=new Bus();
  Taxi buleTaxi =new Taxi();
  Cinema redStarCinema=new Cinema();
  bus101.brake();
  bus101.charge();
  buleTaxi.brake();
  buleTaxi.charge();
  buleTaxi.controlAirTemperature();
  redStarCinema.charge();
  redStarCinema.controlAirTemperature();
  

 }

}

运行效果如图:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值