Java语言基础8

Java基础——接口

在java中,接口可以看做是对开发人员的一种规范,也是对代码的一种规范,可以提高编程效率,便于后续程序的修改。java中类不能多继承,而接口可以多继承,而这就相当于弥补了java不能多继承的缺陷。

接口的定义

java中我们用interface来定义接口。定义接口基本格式如下:

修饰符 interface 接口名 {
  [public] [static] [final] 常量;
  [public] [abstract]方法; 
}

接口名为合法的Java标识符,接口中通常只能包含抽象方法和常量,常量一般用final修饰,接口中的方法*(不包括接口中的默认方法和静态方法)*没有方法体,只有方法头。接口相当于一个抽象类,所以,与java类文件一样,文件名必须与接口名相同,要求首字母大写。

接口的实现

java中我们在类中实现接口,类实现接口中可以只用关键字implements
如下,我们定义了一个接口

public interface Goods {// 定义商品接口
    public String getName();//获取商品名字
    public int getPrice();//获取上商品价格
}

我们定义了一个商品接口,里面有两个抽象方法。我们用一个类来实现它

public class Cola implements Goods {
    @Override
    public String getName() {
        return "可口可乐";
    }
    @Override
    public int getPrice() {
        return 3;
    }
}
public class TestGoodsShop {//计算卖出商品的收入
    public static void main(String[] args) {
        Cola cola = new Cola();
        System.out.println("商品名字:"+cola.getName());
        System.out.println("商品价格:"+cola.getPrice());
    }
}

来看一下输出结果:
在这里插入图片描述
可以看到,我们在实现类里实现了具体的接口中的抽象方法。实现了类似于继承的功能。
当然我们也可以让另一个类同时来实现这个接口,如下:

public class Fanta implements Goods {
    @Override
    public String getName() {
        return "Fanta芬达";
    }
    @Override
    public int getPrice() {
        return 4;
    }
}

测试代码如下:

public class TestGoodsShop {//计算卖出商品的收入
    public static void main(String[] args) {
        Cola cola = new Cola();
        System.out.println("商品名字:"+cola.getName());
        System.out.println("商品价格:"+cola.getPrice());

        System.out.println("--------------------------");

        Fanta fanta = new Fanta();
        System.out.println("商品名字:"+fanta.getName());
        System.out.println("商品价格:"+fanta.getPrice());
    }
}

输出结果:
在这里插入图片描述
此时我们就实现了一个简单的多继承。可能还有其他商品,我们也可以继续加一些相应的类来实现商品接口,值得注意的是,当我们写一个接口时,要尽量考虑到可能用到的所有方法,实现它的类要实现接口里的所有方法。当我们想要修改其中的某个类时,不用去修改其他的东西,因为这些实现类之间几乎没有任何关系,这会让我们的代码更容易维护和修改,具有更强的拓展性。

接口的继承

java中,一个接口也可以继承另一个接口。和类的继承一,接口的继承也是使用extends关键字。
如下:

public interface Goods {
    public abstract String getName();//获取商品名字
    public abstract int getPrice();//获取上商品价格
}


//MyGoods接口继承Goods接口
public interface MyGoods extends Goods {
    public static int goodsNum =10;
}  

//Cola类实现MyGoods接口
public class Cola implements MyGoods{
    @Override
    public String getName() {
        return "可口可乐";
    }
    @Override
    public int getPrice() {
        return 3;
    }
}

public class TestGoodsShop {   //计算卖出商品的收入
    public static void main(String[] args) {
        Cola cola = new Cola();
        System.out.println("商品名字:"+cola.getName());
        System.out.println("商品价格:"+cola.getPrice());
        System.out.println("我购买的商品数量:"+cola.goodsNum);
    }
}

输出结果如下:
在这里插入图片描述
可以看到,MyGoods接口里我们并没有写getPrice()方法和getName()方法,但我们却可以通过它的实现类产生的对象调用这两个方法。也就是接口MyGoods继承了Goods接口同时MyGoods接口也有自己的常量,当然也可以有自己的抽象方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值