Java 接口 interface关键字

1.概念:一种特殊的类,有全局常量和公共方法组成

 定义接口用interface关键字

2.语法:            //中括号“[ ]”的含义:你可继承父接口,也可不继承,是可选的

[修饰符] (abstract) interface 接口名[extends 父接口1,父接口2...]  //接口可继承多个父接口(即:接口是多继承的);abstract若没写,系统会自动加上

{

0个到多个常量定义...

0个到多个抽象方法的定义...

}

接口就是用来被继承,被实现的,修饰符一般建议用public

注意:不能使用private和protected修饰接口

3.接口定义:

常量:接口中的属性是常量,即使定义时不添加public static final修饰符,系统也会自动加上。

方法:接口的方法只能是抽象方法,总是使用,即使定义时不添加public abstract修饰符,系统也会自动加上。

4.一个类可以实现一个或多个接口,实现接口使用implement关键字,Java中一个类能继承一个父类,是不够灵活的,可通过实现多个接口来补充

 

继承父类实现接口的语法为:

[修饰符] class 类名 extends 父类 implement 接口1,接口2...

{

类体部份  //如果继承了抽象类,需要实现继承的抽象方法;如果遵守了一个接口,就要实现接口中的抽象方法

}

如果要继承父类,继承父类必须在实现接口之前

例:

abstract class Telphone{    //此父类只是用来约束子类,所以可以定义成抽象类

public abstract void call();    //在抽象类里若想要约束子类,就可定义为抽象方法       抽象方法没有方法体以分号结束

public abstract void message();

}

class Cellphone extends Telphone{

   public void call(){        //实现抽象类里要求的方法call

    System.out.println("通过键盘来打电话");

  }

   public void message(){    //实现抽象类里要求的方法message

    System.out.println("通过键盘来发短信");

  }

}

class Smartphone extends Telphone{

  public void call(){

    System.out.println("通过语音来打电话");

  }

  public void message(){

    System.out.println("通过语音来发短信");

  }

}

 

class Ex17{

  public static void main(String[] args){

    Telphone tel1=new Cellphone();    //抽象类的父类引用指向一个子类对象,先创建一个普通的电话的对象

    tel1.call();    //通过引用就可以打电话

    tel1.message();  //通过引用就可以发短信

    Telphone tel2=new Smartphone();  //通过父类的引用指向智能手机的对象

    tel2.call();

    tel2.message();

  }

}

 

interface IplayGame{

public void PlayGame();

}

abstract class Telphone{    //此父类只是用来约束子类,所以可以定义成抽象类

public abstract void call();    //在抽象类里若想要约束子类,就可定义为抽象方法       抽象方法没有方法体以分号结束

public abstract void message();

}

class Cellphone extends Telphone implements IplayGame{

  public void call(){        //实现抽象类里要求的方法call

    System.out.println("通过键盘来打电话");

  }

  public void message(){    //实现抽象类里要求的方法message

    System.out.println("通过键盘来发短信");

  }

}

class Smartphone extends Telphone{

  public void call(){

    System.out.println("通过语音来打电话");

  }

  public void message(){

    System.out.println("通过语音来发短信");

  }

  public void PlayGame(){

    System.out.println("具有玩游戏的功能");

  }

}

class psp implements IplayGame{      //不能继承phone抽象类,但psp有游戏的特性,所以要遵守IplayGame接口

  public void PlayGame(){

    System.out.println("具有玩游戏的功能");

  }

}

class Ex17{

  public static void main(String[] args){

    Telphone tel1=new Cellphone();    //抽象类的父类引用指向一个子类对象,先创建一个普通的电话的对象

    tel1.call();    //通过引用就可以打电话

    tel1.message();  //通过引用就可以发短信实现了接口的对象

    Telphone tel2=new Smartphone();  //通过父类的引用指向智能手机的对象

    tel2.call();

    tel2.message();

 

    IplayGame ip1=new Smartphone();      //ip1接口引用指向一个实现了接口的对象

    ip1.PlayGame();

    IplayGame ip2=new psp();

    ip2.PlayGame();

 

IplayGame ip3=new IplayGame();{  //new一个接口的代码                输出:通过键盘来打电话          或者:new IplayGame(){

    public void PlayGame(){                                 通过键盘来发短信             public void PlayGame(){   

      System.out.println("使用匿名内部类的方式实现接口");         通过语音来打电话              System.out.println("使用匿名内部类的方式实现接口");

  }                                   通过语音来发短信              }

};                                      具有玩游戏的功能               }

ip3.PlayGame();                              具有玩游戏的功能

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

}

 

使用接口:

接口在使用过程中,还经常与匿名内部类配合使用

匿名内部类:没有名字的内部类,多用于关注实现而不关注实现类的名称

例://直接new一个接口,直接在接口里实现这个代码

interfacce i=new interface(){

public void method(){

System.out.println("匿名内部类实现接口的方式");

}

};

posted @ 2017-12-16 00:53  糖分控  阅读(5217)  评论(0编辑  收藏  举报