接口与类
编写接口的方式与类相似,但接口不同于类。二者最本质的区别便是类描述对象的属性和方法,而接口则包含类要实现的方法
接口与类的不同之处主要有:
1.接口不能用于实例化对象,但是可以被类实现,;
2.接口没有构造方法;
3.接口中所有的方法必须是抽象方法,Java 8 之后接口中可以使用 default 关键字修饰的非抽象方法;
4接口不能包含普.通成员变量,除了 static 和 final 变量;
5.接口不是被类继承了,而是要被类实现;
6.接口支持多继承,就是一个类可以继承多个接口;
接口的实现
//定义一个接口 interface Icount{ public double countMoney(double salary,double bonus); }
//实现接口 class Calculator1 implements Icount{ public double countMoney(double salary, double bonus){ return salary+bonus; } }
我们这里用到了类Calculator1中的方法countMoney;但是如果我们将Calculator1的类名称改为Calculator2,Seller的Calculator1 calculator会报错,这是因为编译器找不到Calculator2类。
class Seller{ String name;// 营业员的名称 Icount calculator; // 这里使用接口声明 public Seller(String name, Calculator1 calculator) { super(); this.name = name; this.calculator = calculator; } // 计算的方法 public void quote(double salary,double bonus){ System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary, bonus)+"元。"); } }
但是我们将Calculator1 calculator改为接口类型( Icount calculator ),不管类Calculator1的类名怎么改变,Seller都不会报错。可能说到这里还是有的小伙伴不太明白,我们举个例子:
比如类Calculator1是张三写的程序,Seller是李四写的程序,现在张三把类名改成了Calculator2,如果是类的方式李四用到了张三写的Calculator1,那么张三的程序就会报错,那么张三就要把就需要去修改自己的代码。但是用接口的方式实现张三就不需要修改自己的代码。
class Seller{ String name;// 营业员的名称 Icount calculator; // 这里使用接口声明 public Seller(String name, Icount calculator) { super(); this.name = name; this.calculator = calculator; } // 计算的方法 public void quote(double salary,double bonus){ System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary, bonus)+"元。"); } }