接口

接口:定义了一些方法。
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类型的对象。
posted @ 2015-12-04 18:17  doxob  阅读(226)  评论(0)    收藏  举报