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接口也有自己的常量,当然也可以有自己的抽象方法。