首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

接口跟抽象类的作用 请详细说明。

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

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

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

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

所以求明白人帮帮忙 这个问题困扰了我很久很久了   求能顿悟
[最优解释]
嗯,你这个问题,最好是手把手的和你说比较好,几句文字可能你还不明白,说明加上例子你才能更好的理解,给你个链接,你看下他的视频,这是毕向东的视频,你下载第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,所有人都可能会陷入混乱。
但如果使用接口的话,在你使用它之前,就要想好它要实现的全部功能(接口实际上就是将功能的封装)。确定下这个接口后,如果用户需求变了,你只要重新写它的实现类,而其它人只会调用你的接口,他不管你是怎么实现的,它只需要接口提供的功能。这样,很可能只需要把你的代码修改就可以了,其他人什么都不用做。
同时:这样做的话,使得开发人员能够分工明确,只要确定下来接口了,就可以同时进行开发,提高开发效率。
另外,使用接口还有使用方便,可读性强,结构清晰等优点。

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

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

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

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

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

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


[其他解释]
using System;
using System.Collections.Generic;
using System.Text; 
namespace Example17
{    
   class Program    
   {        
       //一个完整的接口声明示例        
         interface IExample        
        {            
          //属性            
             string P{ get; set;}            
          //方法            
             string F(int Value);            
           //事件            
              event EventHandler E;            
           //索引指示器            
              string this[int Index]{ get;  set; }        
          }        
           interface IA 
          { 
            int Count { get; set;}        
          }        
           interface IB        
          {            
            int Count();  
          }        
          //IC接口从IA和IB多重继承        
             interface IC : IA, IB        
          {        
          }        
          class C : IC        
          {            
             private int count = 100;


             //显式声明实现IA接口中的Count属性            
                int IA.Count            
             {                
                 get { return 100; }                
                 set { count = value; }            
              }            
            //显式声明实现IB接口中的Count方法            
               int IB.Count()            
            {                
               return count * count;            
            }        
      }        
      static void Main(string[] args)        
      {            
          C tmpObj = new C();             
          //调用时也要显式转换            
            Console.WriteLine("Count property: {0}",((IAtmpObj).Count);  
          Console.WriteLine("Count function: {0}", ((IB)tmpObj).Count());
          Console.ReadLine();        
       }    
   }
}
[其他解释]
但如果使用接口的话,在你使用它之前,就要想好它要实现的全部功能(接口实际上就是将功能的封装)。确定下这个接口后,如果用户需求变了,你只要重新写它的实现类,而其它人只会调用你的接口,他不管你是怎么实现的,它只需要接口提供的功能。这样,很可能只需要把你的代码修改就可以了,其他人什么都不用做。




能不能举个例子说说?????????????????求详解   正在领悟中。。。
[其他解释]
该回复于2012-11-13 06:09:24被管理员删除
[其他解释]

引用:
嗯,你这个问题,最好是手把手的和你说比较好,几句文字可能你还不明白,说明加上例子你才能更好的理解,给你个链接,你看下他的视频,这是毕向东的视频,你下载第7天的,看完了,你就什么都懂了 http://edu.csdn.net/main/feature/bxd_25.shtml



谢谢
[其他解释]

引用:
using System;
using System.Collections.Generic;
using System.Text; 
namespace Example17
{    
   class Program    
   {        
       //一个完整的接口声明示例        
         interface IEx……




不知道你说这个是  什么意思
[其他解释]
该回复于2012-11-13 20:56:58被管理员删除

热点排行