一直使用抽象类和接口,谁能说说为什么要用这些,用了到底在项目中有什么好处了?
回答的要深刻些啊!!

解决方案 »

  1.   


    //好处就是class C调用的A或B的方法只与接口相关就好 InterFace IA
    {
     void doSomeThing();
    }
    public class A:IA
    {
     public void doSomeThing();
    }
    public class B:IA
    {
     public void doSomeThing();
    }
    public class C
    {
     public void useAorB(IA ia)
     {
      ia.doSomeThing();
     }
    }
      

  2.   

    这样吧,你的电脑上只有一个USB接口。
    这个USB接口可以接MP3,数码相机,摄像头,鼠标,键盘等
    好了,这里就有一个问题:所有的上述硬件都可以公用这个接口,而且有很好的扩展性。
    这就是接口
    你有一辆宝马的汽车,有一天,你拿它去越野了,轮胎,哎,自然爆掉,现在你想换轮胎。
    你不想换宝马的轮胎,太贵。
    你不想换qq的轮胎,不好使。
    你想换OOOO的,换了,好用。
    这就是抽象类。
      

  3.   

    如电器,可以定义一下接口:
    Open();
    Close();
      

  4.   

    能用项目中的例子来帮我解释吗?
    我还是不太能理解,项目啥时要用到他们其实我看了java的spring框架,里面有个IOC的概念,到时体现了下接口的作用,正如,楼上3楼的例子所体现。
    实现了解耦。
    就是想更多有个了解,啥时用接口,啥时用抽象类呢?接口是可以有属性的。不可以有字段。
      

  5.   

    1、首先让理解接口和抽象类的使用环境
    横看接口竖看类:横向扩展使用接口;纵向扩展使用抽象基类;横向和纵向都要扩展,使用抽象基类继承接口。
    在差异较大的对象中追求功能上的共性时,使用接口。
    在差异较小的对象中追求功能上的不同时,使用抽象基类,因为抽象基类可以包含实现的成员。比如说,篮球场上有前锋(forward)、中锋(center)、后卫(guard),无论哪个位置,前锋、中锋和后卫都有防守和进攻的责任,另外中锋专注于篮板。这时候,可以定义运动员(player)抽象基类,抽象基类中定义虚(virtual)方法:Attack(进攻)、Defense(防守),然后让前锋类、中锋以及后卫类去重载(override)。
    class Player
    {
    public virtual void Attack(){}
    public virtual void Defense(){}
    }
    class Forward:Player
    {
    public override void Attack(){//前锋的进攻}
    public override void Defense(){//前锋的防守}
    }
    class Center:Player
    {
    public override void Attack(){//前锋的进攻}
    public override void Defense(){//前锋的防守}
    public void Rebound(){//抢板}
    }
    class Guard:Player
    {
    public override void Attack(){//前锋的进攻}
    public override void Defense(){//前锋的防守}
    }
    class PlayerInvoke:Player
    {
    private Player _player;
    public PlayerInvoke(Player player)
    {
    _player=player;
    }
    public void Attack()
    {
    _player.Attack();
    }
    public void Defense()
    {
    _player.Defense();
    }
    }
    调用的时候
    Player player=new Forward();
    Player player=new Center();
    Player player=new Guard();
    PlayerInvoke pi=new PlayerInvoke(player);
    pi.Attack();
    这是简单工厂实际模式的简单应用,此时你要查看哪个位置运动员的防守、进攻不是灵活多了?而且,在增加其它位置的运动员时,易于扩展和维护。
      

  6.   

    interface IUSB
    {
       void Connect();
       void Close();
       bool SendByteToDevice(long location,byte b);
       byte GetByteFromDevice(long location);
    }class MP3:IUSB
    {
        void Connect()
      {
         MessageBox.Show("MP3 Connected");
      }   void Close()
      {
        MessageBox.Show("MP3 Removed From USB Interface");
      }
         bool SendByteToDevice(long location,byte b)
      {
         return false;
      }
       byte GetByteFromDevice(long location)
      {
        return 0;
      }
    }
    class Mouse:IUSB
    {
        void Connect()
      {
         MessageBox.Show("Mouse Connected");
      }   void Close()
      {
        MessageBox.Show("Mouse Removed From USB Interface");
      }
         bool SendByteToDevice(long location,byte b)
      {
         return false;
      }
       byte GetByteFromDevice(long location)
      {
        return 0;
      }
    }main(string[] fucks)
    {
       IUSB usb=new MP3();
       usb.Connect();
       usb.Close();   usb=new Mouse();
          usb.Connect();
          usb.Close();
    }
    上面的就是接口。接口主要用于多态化方法。
    class BaoMaCar
    {
       AbLunTai LunTai= new BaoMaLunTai();
       void runLongTime(){}
    }abstract class AbLunTai 
    {
       string Name="AbLunTai";
    }
    class BaoMaLunTai
    {string Name="BaoMaLunTai";
    }class OOOOLunTai
    {string Name="OOOOLunTai";
    }main(string[] gays )
    {
       BaoMaCar car=new BaoMaCar();
       car.runLongTime();
       car.LunTai=new OOOOLunTai();
    }这就是抽象类,多用于多态对象。
      

  7.   

    2、抽象基类:实现代码复用
    人分男人和女人,不论男人女人都有吃饭(这就是共性,当然还有很多其它共性),但是男人和女人有其它行为是不一样的(比如上厕所的方式,^_^低俗)..这时候可以把男人和女人的共性拿出来,然后使用集成,这样男人女人类都复用这些代码。
    abstract class Person
    {
    public void Eating()
    {//人吃饭}
    public virtual void WC()
    {
    //男人和女人类重写
    }
    }
    class Female:Person
    {
    public override void WC(){}
    }
    class Male:Person
    {
    public override void WC(){}
    }
      

  8.   

    3、接口:面向接口编程模式、适配器模式等
    接口表示调用者和设计者的一种约定,在多人合作开发同一个项目时,事先定义好相互调用的接口可以大大提高开发的效率。接口是用类来实现的,实现接口的类必须严格按照接口的声明来实现接口提供的所有功能。有了接口,就可以在不影响现有接口声明的情况下,修改接口的内部实现,从而使兼容性问题最小化。当其他设计者调用了接口后,就不能再随意更改接口的定义,否则项目开发者事先的约定就失去了意义。但是可以在类中修改相应的代码,完成需要改动的内容。抽象类抽象类是指这个类是不完全可用的,只能作为其它类的基类。抽象类和其它非抽象类的最大区别之处在于:抽象类不能被实例化。1) 抽象类和接口都不能被实例化2)接口是完全抽象的成员集合;抽象类可以完全实现,也可以部分实现或者根本不实现,从而封装继承类的通用功能3) 抽象类只能作为基类使用,接口可以从其它基接口继承4)接口成员默认访问方式是public,接口成员定义不能包含任何访问修饰符;抽象类则不然5) 接口中不能声明任何种类的静态成员,抽象类则可以6) 接口成员必须只能是方法、属性、索引器和事件,且不提供实现;抽象类还可以声明字段以及实现的方法和属性等7) 抽象方法只能在抽象类中声明
      

  9.   

    这个说来话长了。得从c++那辈子说起了。话说c++程序员是没有这两个关键字的,所有的多态都是virtual,但是情况一多一复杂就很难办了,c++程序员不得不在自己的代码里玩“意大利面条”,纯虚函数,base.base.method(),这样使代码非常难读难调试所以后面的java和c#才特意规定了 这两个关键字,他就是一种限定,能让程序员更清楚的限定自己的代码上面是语法的历史。如果说实际意义,我们就的说哲学了。 按老外们的头脑认为,程序实际就是现实对象在头脑中的反映,是抽象的,形而上学的。抽象的东西是基石,就像原子和分子,老外说物质是原子和分子组的,所以他们更倾向于构建原子和分子 及规则。相比来说 抽象类 就是 物质对象在头脑中的那个 物理或化学模型而接口则通常是物质或化学模型里的 规则体现。比如化学:苯环系列的东西在物质上可以被抽象成,苯环的抽象类。而苯环系列物质所体现的物理或化学特性则可以被当做接口规则去体现
      

  10.   

    关于重用:
                    LunTai dai = new BaoMaLuntai();
                Console.WriteLine(dai.size);
        public abstract class LunTai 
        {
           public int size = 50;
        }    public class BaoMaLuntai 
        {    }    public class OOOOLuntai 
        {    }
      

  11.   

    我们简单还原一下 一价元素氢的实现  接口 酸碱性接口
    {
      string 酸碱性 
    }  抽象类 一价元素:酸碱性接口  //抽象类继承酸碱性接口,以实现一价元素通用特性
     {
        string 酸碱性 {return “弱酸”}
     }  元素类 氢:一价元素,酸碱性接口 //继承一价元素和酸碱性接口,并显示实现酸碱性接口,以实现氢元素独立的酸碱特性
     {
        
       string 酸碱性接口.酸碱性{return "氢的ph值是xxxx"}
     }