认识接口

一、接口的定义

  接口的定义和类的定义很类似,分为接口生命和和接口体。

  1、接口声明

    和类不同的是,接口使用interface来声明自己是一个接口,格式如:

    interface 接口的名字

  2、接口体

    接口体包含常量的声明(没有变量)和抽象方法两部分,接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是public,而且是static,所有的抽象方法的访问权限一定都是public。

二、实现接口

  1、类实现接口

  接口由类来实现以便使用接口中的方法。用implements声明该类实现一个或多个接口。多个接口用逗号隔开。如A类实现Printable和Addable接口。  

class A implements Printable,Addable

  2、重写接口中的方法

  如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法,方法的权限必须为pubic来修饰。实现接口的非抽象类实现了该接口的方法,即给出了方法的具体行为功能。

  抽象类既可以重写接口中的方法,也可以直接拥有接口中的方法。

  3、接口的继承

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

三、abstract类与接口的比较

  接口和abstract类的比较如下:

  * abstract类和接口都可以有abstract方法。

  * 接口中只可以有常量,不能有变量;而abstract类中既可以有常量也可以有变量。

  * abstract类中也可以有非abstract方法,接口不可以。

    在设计程序时应当根据具体的分析来确定是使用抽象类还是接口,abstract类除了提供重要的需要子类重写的abstract方法外,也提供了子类可以继承的变量和非abstract方法。如果某个问题需要使用继承才能更好的解决,比如,子类除了需要重写父类的abstract方法,还需要从父类继承一些变量或继承一些重要的非abstract方法,就可以考虑用abstract类。如果某个问题不需要继承,只要需要若干个类给出某些重要的abstract方法的实现细节,就可以考虑使用接口。

四、例题

  实现一个防盗门的功能,将开门,关门等功能放在抽象类中,将开锁上锁放在接口中,由防盗门类来实现,并添加一个拍照的功能放入接口

Door.java

1 public abstract class Door {
2     abstract void openDoor();
3     abstract void closeDoor();
4 }

Lock.java

public interface Lock {
    void onLock();
    void unLock();
}

Ling.java

public interface Ling {
    void takePicture();
}

TheftproofDoor.java

public class TheftproofDoor extends Door implements Lock,Ling{
    @Override
    void closeDoor() {
        // TODO Auto-generated method stub
        System.out.println("轻轻拉门,门关上了。");
    }
    @Override
    public void onLock() {
        // TODO Auto-generated method stub
        System.out.println("插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙。");
    }
    
    @Override
    public void takePicture() {
        // TODO Auto-generated method stub
        System.out.println("铃......咔嚓......照片已储存");
    }
    
    @Override
    public void unLock() {
        System.out.println("插进钥匙,向左旋转钥匙三圈,锁打开了,拔出钥匙。");
        
    }

    @Override
    void openDoor() {
        // TODO Auto-generated method stub
        System.out.println("用力推,门打开了。");
    }
    
    
}

Test03.java

public class Test03 {
    public static void main(String[] args) {
        TheftproofDoor door=new TheftproofDoor();
        door.closeDoor();
        door.onLock();
        door.takePicture();
        door.unLock();
        door.closeDoor();
    }
}

 

 

posted @ 2019-06-03 17:35  道友请留步~  阅读(224)  评论(0编辑  收藏  举报