前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【测开技能】Java系列(二十 九)接口

【测开技能】Java系列(二十 九)接口

作者头像
雷子
发布2022-09-29 20:25:31
2090
发布2022-09-29 20:25:31
举报

前一篇:

【测开技能】Java系列(二十 八)抽象类

这一篇,我们开始去分享接口


正文

在抽象类中,抽象方法本质上是定义接口规范:即规定类的接口,从而保证所有子类都有相同的接口实现,这样多态就能发挥出作用。

如果一个抽象类没有字段,所有方法全部都是抽象方法:

代码语言:javascript
复制
abstract class Food {
    public abstract void  getTax() ;
    public  abstract void   say();
}

那么这样的一个抽象类,就可以如下改造

代码语言:javascript
复制
interface  Food {
   void  getTax() ;
    void   say();
}

这样就完成了一个接口的定义。所有的接口的方法都是public abstract方法。那么如何去使用这样一个接口呢,很简单

代码语言:javascript
复制
   class  Manto implements Food{
        @Override
        public void getTax() {

        }

        @Override
        public void say() {

        }
    }

interface  Food {
        void  getTax() ;
        void   say();
}

可以看到,类要去实现,用implements,这里完成后,需要重写里面所有的方法。

那么一个类,可以实现多个接口吗?我们测试下

代码语言:javascript
复制
interface  Food {
        void  getTax() ;
        void   say();
}
interface  name {
    void  getname() ;
    void   setname();
}

然后在类中去实现

代码语言:javascript
复制
}
    class  Manto implements Food,name{
        @Override
        public void getTax() {

        }

        @Override
        public void say() {

        }

        @Override
        public void getname() {

        }

        @Override
        public void setname() {

        }
    }

可以看到是成功的,没有报错,这样就可以证明,一个类可以实现多个接口,但是一个类只能实现一个类如下

代码语言:javascript
复制
    class  Manto extends Food,name{
        @Override
        public void getTax() {

        }

        @Override
        public void say() {

        }

        @Override
        public void getname() {

        }

        @Override
        public void setname() {

        }
    }

class   Food {
    void getTax() {
        
    }

    void say() {
        
    }
}
class   name {
    void getname() {
        
    }

    void setname() {
        
    }
}

看idea,报错了

运行下

直接也是报错的。

那么接口之间能否继承呢?我们尝试下

代码语言:javascript
复制
interface  Food  extends name{
        void  getTax() ;
        void   say();
}
interface  name {
    void  getname() ;
    void   setname();
}

可以看下,没有报错,我们在类上使用下

代码语言:javascript
复制
class  Manto implements Food{
    @Override
    public void getTax() {

    }

    @Override
    public void say() {

    }

    @Override
    public void getname() {

    }

    @Override
    public void setname() {

    }
}

写一个方法测试下

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        Food food=new Manto() ;
        food.say();
    }
}

结果执行

在接口中,可以定义一个default方法

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        Food food=new Manto() ;
        food.getname();
    }
}
    class  Manto implements Food{
        @Override
        public void getTax() {

        }

        @Override
        public void say() {

        }

        @Override
        public void setname() {

        }
    }

interface  Food  extends name{
        void  getTax() ;
        void   say();
}
interface  name {
    default  void  getname(){
        System.out.println("name");
    } ;
    void   setname();
}

这个方法,我们不去实现,默认的执行的时候,就执行默认的。结果如下

如果我们在继承后,重写了getname方法

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        Food food=new Manto() ;
        food.getname();
    }
}
    class  Manto implements Food{
        @Override
        public void getTax() {

        }

        @Override
        public void say() {

        }

        @Override
        public void setname() {

        }
        @Override
        public void getname() {
            System.out.println("mantou");
        }
    }

interface  Food  extends name{
        void  getTax() ;
        void   say();
}
interface  name {
    default  void  getname(){
        System.out.println("name");
    } ;
    void   setname();
}

结果

证明接口中的default 方法可以复写。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档