黑马程序员技术交流社区

标题: 关于抽象类和接口的疑惑 [打印本页]

作者: tangxiaobo1991    时间: 2014-2-12 22:12
标题: 关于抽象类和接口的疑惑
本帖最后由 tangxiaobo1991 于 2014-2-12 22:46 编辑

今天鄙人自学到了抽象类和接口的部分,小弟有几个疑惑希望大神能够点拨一下下。我就疑惑既然有了抽象类,为什么还要接口??而且据说接口还用的很普遍。例如下面的例子:
abstract class Person
{
   void speak(){}
    abstract void study();
}
interface smoke()
{
    public abstract static void smoke();
   final int x=3;
}

上面的这段代码完全可以用下面的代码代替
abstract class Person
{
  void speak(){}
  abstract void study();
abstract static void smoke();
final x=4;
}
在主函数中实例化中,完全可以用下面的方法代替上面的代码。那么既然接口也是一种特殊的抽象类,完全可以用抽象类代替接口,为什么还要用接口呢?


作者: panzhenglian    时间: 2014-2-12 22:22
本帖最后由 panzhenglian 于 2014-2-12 22:23 编辑

首先,Java不支持多继承,也就是说一个类只允许有一个父类,而接口的出现,就弥补了这一个不足,一个类可以实现多个接口。接口可以相当于一个规则,接口运用方面举个小例子:当你的一个方法的某个参数需要传递一个对象时,你不知道要传递的对象名字,但你知道这个对象一定有某个方法,这时候就可以定义一个接口,写上抽象方法,下次传递参数时就可以传递这个接口的实现类对象就可以了。
作者: 徐君    时间: 2014-2-12 22:26
java不支持多继承啊,接口就是多继承的另一种表现。不同的类可以实现同一个接口 ,这就是接口的好处。

作者: 一年_Hei    时间: 2014-2-12 22:26
接口比抽象类用的多。接口定义规则,需要它才去实现。接口还能实现多继承。而抽象类必须写子类才能创建对象。个人感觉接口灵活,实用性高
作者: tangxiaobo1991    时间: 2014-2-12 22:38
徐君 发表于 2014-2-12 22:26
java不支持多继承啊,接口就是多继承的另一种表现。不同的类可以实现同一个接口 ,这就是接口的好处。
...

继承也可以一个父类有许多子类啊!!
作者: tangxiaobo1991    时间: 2014-2-12 22:43
panzhenglian 发表于 2014-2-12 22:22
首先,Java不支持多继承,也就是说一个类只允许有一个父类,而接口的出现,就弥补了这一个不足,一个类可以 ...

精辟啊,,果然高手
作者: tangxiaobo1991    时间: 2014-2-13 10:26
突然感觉,类的继承和数据库的思想有点像
作者: kira    时间: 2014-2-13 11:52
因为java不支持多继承 而且还有一个就是上面没说到的 降低耦合性
继承的耦合性会大于实现接口的耦合性
比如说多线程 我实现runnable的好处肯定大于继承Thread
而且接口之间还能相互继承
作者: tangxiaobo1991    时间: 2014-2-13 13:33
kira 发表于 2014-2-13 11:52
因为java不支持多继承 而且还有一个就是上面没说到的 降低耦合性
继承的耦合性会大于实现接口的耦合性
比 ...

前辈,我还没学到那里。。不过感觉好高档大气上档次的赶脚!!!多多交流
作者: kira    时间: 2014-2-13 15:40
tangxiaobo1991 发表于 2014-2-13 13:33
前辈,我还没学到那里。。不过感觉好高档大气上档次的赶脚!!!多多交流 ...

这个很简单 耦合性说白了就是关联度 举个例子 我买显卡 同样的显存 同样的支持DX11.1
同样的性能 假如有一个显卡只支持一种主板 而另一显卡支持多种主板 那我肯定是买后一种
而接口的本质就是降低耦合性 里面的方法可以看成一种规则
抽象类归根结底还是个类 是类只有单继承 接口就是为了弥补这点




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2