日期:2014-05-20  浏览次数:20845 次

接口和抽象类的作用 请详细说明。。。。。。。。。。。。。。。
我知道继承普通类可以让子类用父类的方法,可以少些代码

但是接口和抽象类 只是声明了方法名没有方法体,只用在实现类和继承的子类重写方法才行!!

  那为什么不在子类中直接写这些方法呢   感觉现在还是弄不明白  像是多余的一样!!!

所以求明白人帮帮忙 这个问题困扰了我很久很久了   求能顿悟
------最佳解决方案--------------------
嗯,你这个问题,最好是手把手的和你说比较好,几句文字可能你还不明白,说明加上例子你才能更好的理解,给你个链接,你看下他的视频,这是毕向东的视频,你下载第7天的,看完了,你就什么都懂了
http://edu.csdn.net/main/feature/bxd_25.shtml
------其他解决方案--------------------
楼主,继承不是为了让你少写几行代码,而是为了增强系统的兼容性和灵活性
------其他解决方案--------------------
大型项目中,往往是构架师或者高级软件开发人员负责进行整体架构设计的,这个时候,他们定义接口和抽象类,确定好整体的软件构架,然后中低层的软件研发人员再负责对接口进行实现,这是从分工的角度谈接口和抽象类的作用
在软件设计模式里,几乎所有的模式都要用到接口或者抽象类,因为这是抽象软件架构的重要方法,也是OOP所提倡的编程理念,这是从软件工程的角度谈接口和抽象类的作用
------其他解决方案--------------------
现实点的例子
public class 食物{}
public class 主食 extends 食物{}
public class 面食 extends 主食{}
public class 米食 extends 主食{}
public class 馒头 extends 面食{}
public class 包子 extends 面食{}
public class 狗不理包子 extends 包子{}
public class 天津产的狗不理包子 extends 狗不理包子 {}
public class 面条 extends 面食 {}
public class 米饭 extends 米食 {}
……

如果你只吃“面”食,那么你的灵活性没有吃“主食”的强
如果你只吃“包子”,那么你的灵活性肯定比吃“面食的差
如果你只吃”天津产的狗不理包子“,你的灵活性会更差
……
具体一点说,如果你有一个方法,需要传入一个”食物“的参数,明显你在设计你的方法时,把参数类型设置为”泛类型“比传入”精确类型“更具灵活性:
// 差的灵活性
public class Person {
    public void f(天津的狗不理包子 food){
    }
}

// 好的灵活性
public class Person {
    public void f(主食 food){
    }
}

对第二个类,调用者可供选择的参数有很多
Person p = new Person();
......
p.f(new 面条());
p.f(new 米饭());
f.f(new 包子());
……
而对第一个类,调用者只能
Person p = new Person();
……
p.f(new 天津的狗不理包子());

==============================================
楼主转换一个观念,继承、抽象类、接口等等多态,带来的方便并不体现在对这些类的实现上,而是体现在使用这些类的灵活性上。

------其他解决方案--------------------
楼主可以去参考一下这个简单的说明:继承和接口的好处
------其他解决方案--------------------
对于接口的作用,在一些小的项目上,很难看出其发挥的优势。这就使一些经常的做小项目的开发人员,做时间久了就感觉不到它有什么好的,有时候写起来还麻烦,干脆不用了。其实,在一些大项目上,接口的作用是发挥地相当的明显的。

比如:如果你开发业务逻辑代码,当你好不容易的实现了它全部的功能,突然用户需求要改,你在修改你代码的同时,调用你代码的其它人也会改,如果代码关联性强的话,会有很多人都要改动代码,这样一来二去,程序会变得相当的不稳定,而且可能还会出现更多的新Bug,所有人都可能会陷入混乱。
但如果使用接口的话,在你使用它之前,就要想好它要实现的全部功能(接口实际上就是将功能的封装)。确定下这个接口后,如果用户需求变了,你只要重新写它的实现类,而其它人只会调用你的接口,他不管你是怎么实现的,它只需要接口提供的功能。这样,很可能只需要把你的代码修改就可以了,其他人什么都不用做。
同时:这样做的话,使得开发人员能够分工明确,只要确定下来接口了,就可以同时进行开发,提高开发效率。
另外,使用接口还有使用方便,可读性强,结构清晰等优点。

当然,我说的这些也可能是浅层面的,在其他方面还有很多的好处。

抽象类:可以有抽象方法,也可以有方法的实现。抽象类不一定有抽象方法,而有抽象方法的类一定是抽象类。抽象类不能实例化。
接口:只有方法体的声明,没有方法实现。

一个类可以实现多个接口,但只能继承一个抽象类。

在项目上,我们一般的做法是:最上层为接口,中间层次为抽象类,往下就是我们的实现类。

为什么我们会在中间加上抽象类呢,就是为了提高代码的可重用性,你可以在抽象类里提炼出一些公用的已经实现的方法,那么底下那些实现类只要继承它也就继承了这些方法。

*****
*****
以上转载自百度.还是可以看一下的,你硬要问抽象类和接口有什么作用,真的很难泛泛的回答,具体可能还是要真正做项目的时候才好用,项目越庞大越复杂越能体会到接口的方便。楼主自己摸索吧。
------其他解决方案--------------------
从他们的定义上来理解更加好。
------其他解决方案--------------------
就是项目组长或者项目经理写好接口,加上注释,分给手下的程序员去完成这些代码,
有些人就是有只负责写接口的,有些人则去负责完成代码的。