JAVA语言开发中接口语法问题细节解析
小标 2019-01-09 来源 : 阅读 952 评论 0

摘要:本文主要向大家介绍了JAVA语言开发中接口语法问题细节解析,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言开发中接口语法问题细节解析,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


1、接口的默认

在Java中,可使用 interface来定义抽象的行为外观,如接口中的方法可声明为 public abstract。例如:


public interface Swimmer{

    public abstract void swim();

}

   


接口中的方法没有操作时,一定得是公开且抽象,为了方便,你也可以省略public abstract。


public interface Swimmer{

    void swim();

}

   


swim()默认就是 public abstract。

编译程序会自动帮你加上 public abstract。由于默认一定是 public,因此:


interface Action{

    void execute();

}

class Some implements Action{

    void execute(){

        System.out.printf("gggggg");

    }

}

public class Main{

    public static void main(String[] args) {

        Action action=new Some();

        action.execute();

    }

}

   


“请问执行结果为何?”这个问题本身就是个陷阱,根本无法编译成功,因为 Action中定义的 execute()其实默认为 public abstract,而some类在操作execute()方法时,没有撰写 public,因此就是默认为包权限,这等于是将 Action中 public的方法缩小为包权限,所以编译失败了。必须将some类的 execute()设为 public才可通过编译。

从JDK8开始, interface中的方法可以有限制地操作,这是为了支持 Lambda而扩充的新特性。

在 interface中,可以定义常数。例如:


package hello;

 

public interface Action {

    public static final int STOP=0;

    public static final int RIGHT=0;

    public static final int LEFT=0;

    public static final int UP=0;

    public static final int DOWN=0;

}

   


这类常数称为枚举常数,让程序看的清楚:


public interface Action {

    public static final int STOP=0;

    public static final int RIGHT=1;

    public static final int LEFT=2;

    public static final int UP=3;

    public static final int DOWN=4;

}

 class game {

    public static void main(String[] args) {

 

    }

    public static void play(int action) {

        switch(action) {

            case Action .STOP:

                out.println("停止播放动画");

                break;

            case Action .DOWN:

                out.println("向下播放");

                break;

                ........

        }

 

    }

}

   


这比直接用switch判断0、1、2、3、4看的清楚多了。在interface中只能定义枚举常数,所以可以:


int STOP=0;

int RIGHT=1;

int LEFT=2;

int UP=3;

int DOWN=4;

   


编译程序会自动展开。当然在类中定义枚举常数也可以,但是不能缩写。

JDK5后新增enum语法定义枚举常数:


public enum Action{

    STOP,UP,DOWN,LEFT,RIGHT

}

   


反编译可以看到,范例的enum定义的 Action实际上是个类,而

enum中列举的STOP、 RIGHT、LEPT、UP、DOWN常数,实际上是 public static final,且为Action实例,你无法撰写程序直接实例化 Action,因为构造函数权限设定为 private,只有 Action类中才可以实例化。那么可以使用这个 Action用它来声明类型。例如:


public static void play(Action action) {

    switch(action) {

        case Action .STOP:

            out.println("停止播放动画");

            break;

        case Action .DOWN:

            out.println("向下播放");

            break;

            ........

    }

 

}

   


public static void play(Action action)

在这个范例中,play()方法中的 action参数声明为 Action类型,所以只接受 Action实例,也就是只有 Action.STOP、 Action. RIGHT、 Action.LEFT、 Action.UP、 Action.DOWN可传入。不像刚刚的play()方法,可以传入任何int值,case比较也只能列举 Action实例,所以不用像前面范例,必须使用 default在执行时期检查,编译程序在编译时期会进行类型检查。



类可以操作两个以上接口,如果两个接口中定义了相同方法,如果表示是同一个方法,可以提升为父接口,这两个接口再继承该接口:


public interface Swimmer {

    void a();

}

public interface Action1 extends Swimmer {

    void b();

}

public interface Action2 extends Swimmer{

    void c();

}

   


匿名内部类

在撰写Java程序时,经常会有临时继承某个类或操作某个接口并建立实例的需求。由于这类子类或接口操作类只使用一次,不需要为这些类定义名称,这时可以使用匿名内部类( Anonymous Inner Class)来解决这个需求。匿名内部类的语法为:


new 父类()|接口(){

//类本体操作

}

Object obj=new Object() {

            @Override

            public String toString() {

 

                return "返利";

            }

        };

   


继承object重新定义toString方法。如果是操作接口如Some接口定义抽象方法doSome建立匿名内部类:


Some some = new Some(){

    public void doSome(){

        //执行语句

    };

};

   


JDK8以后接口只有一个方法、可以这样创建:


Some some = () ->{

    //执行语句(Lambda)

}

   


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程