java同样作用的方法_Java的接口用途和方法

1, 抽象类解决不了, 根本问题是Java的类不能多继承.

因为Tiger类继承了动物Animal类的特性(例如 move() 和 drink()) , 但是严格上来将 捕猎(hunt())并不算是动物的特性之一. 有些植物, 单细胞生物也会捕猎的.

所以Tiger要从别的地方来继承Hunt()这个方法. 接口就发挥作用了.

2,也就是说, 接口不会限制实现接口的类的类型,Tiger类与Snake类不但继承了Animal的方法, 还继承(实现)了接口Huntable的方法, 一定程度上弥补java的class不支持多继承的特点.

public void feedAnimal(Huntable hab, Animal a){

this.bringAnimal(a,"Feeding Room");

Animal ht = (Animal)hab;

ht.move("Feeding Room");

hab.hunt(a);

}

里面一样有一句强制转换:Animal ht = (Animal)hab

3,什么情况下应该使用接口而不用抽象类.

做个总结

需要实现多态

要实现的方法(功能)不是当前类族的必要(属性).

要为不同类族的多个类实现同样的方法(功能).

下面是分析:

3.1 需要实现多态

很明显, 接口其中一个存在意义就是为了实现多态. 这里不多说了.

而抽象类(继承) 也可以实现多态

3.2. 要实现的方法(功能)不是当前类族的必要(属性).

上面的例子就表明, 捕猎这个方法不是动物这个类必须的,

在动物的派生类中, 有些类需要, 有些不需要.

如果把捕猎方法卸载动物超类里面是不合理的浪费资源.

所以把捕猎这个方法封装成1个接口, 让派生类自己去选择实现!

3.3. 要为不同类族的多个类实现同样的方法(功能).

上面说过了, 其实不是只有Animal类的派生类才可以实现Huntable接口.

如果Farmer实现了这个接口, 那么农夫自己就可以去捕猎动物了...

我们拿另个常用的接口Comparable来做例子.

这个接口是应用了泛型,

首先, 比较(CompareTo) 这种行为很难界定适用的类族, 实际上, 几乎所有的类都可以比较.

比如 数字类可以比较大小, 人类可以比较财富, 动物可以比较体重等.

所以各种类都可以实现这个比较接口.

一旦实现了这个比较接口. 就可以开启另1个隐藏技能:

就是可以利用Arrays.sort()来进行排序了.

就如实现了捕猎的动物,

可以被农夫Farmer喂兔子一样...

4,有别的理解:

①全局变量定义

②如同上面的例子,我们去实现接口后,能够很明显清楚各个类具体实现类之间的关系,如果将自己的代码交给别人看的时候,他只需要看你所定义的接口就知道了你的类具体是干嘛的。换言之,你看别人的代码,如果别人的代码也是这样定义的,那么是不是改别人代码、看懂别人代码也容易很多了。所以,在之前笔者就说过:接口更像是一种定义的规范。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值