接口
接口:定义了一些方法。
public interface Method{ public abstract void action(); }
某个类要操作这个接口就必须实现接口内的方法
public class Cat implement Method{ private String name; public Cat(String name){ this.name=name; } public void action(){ 这是实现的代码........... } ..... }
创建一个实现了某个接口的类的实例,可以这样写
Method m = new Cat();
注意此时的 m 的类型是Method类型而不是Cat类型,虽然m实际是Cat的实例。如下代码会出现错误
Cat c=m;
这句代码的意思就是把 Method 类型的 m 参考成 Cat 类型的 c,正确的写法应该是
Cat c = (Cat)m;
对m进行强制类型转换(只有当m实际就是Cat类型的实例时才可能转化成功)
接口的作用:统一规划,便于设计
1.没有关系的类之间有相同的方法,可以使这些类都去实现某个定义的该方法的接口。
2.相似的类可以为其共同的方法、属性创建一个父类,让这些相似类去继承它,然后对不同的地方进行重写,或添加属性、方法。
为什么这样做。
1.逻辑清晰
2.方便管理
例如:
我有猫、狗、猪、鸡这几个类,他们都有个叫吃饭的功能。
我要写一个方法对它们进行喂食,就是一个方法(而不是给每一个动物喂食都用不同的方法),当然我们要对动物喂食首先得知道他是什么动物,所以这个方法就得传入一个动物实例作为参数。但因为动物的类型不同。那么参数的类型也就不同,如此就必须用到方法的重载,如下
public void gaveFood(Cat c){ c.eat(); } public void gaveFood(Dog d){ d.eat(); } public void gaveFood(Pig p){ p.eat(); } public void gaveFood(Chook ck){ ck .eat(); }
但是,这样写的代码过于冗余,也不方便维护。因为这四个类都继承的Eat接口,那么我们就可一把他们都看成是一个Eat类型的对象(尽管也许声明对象时并不是如此声明的),所以我们可以用统一用Eat类型的对象来作为gaveFood()方法的参数,因为该方法里面就是调用了Eat接口的eat方法。
public void gaveFood(Eat e){
e.eat();
}
调用时如下class.gaveFood(new Dog());
class.gaveFood(new Cat());
class.gaveFood(new Pig());
class.gaveFood(new Chook());
于是我们可以说实现了Eat接口的实例我们也可以冲动一个Eat类型的对象(但不完全是),除非在实例化对象时把它声明为Eat类型,如下
Eat e = new dog();
还是那句话,此时的e是Eat类型,而不是Dog类型,虽然它本质就是一个Dog类型的对象。

浙公网安备 33010602011771号