抽象方法与虚方法与普通方法:
1 抽象方法必须没有方法体   虚方法必须有方法体   普通方法必须有方法体 
2 抽象方法必须被派生类中的方法实现 
  虚方法可以被派生类中的方法重写也可以不重写直接被使用 
  普通方法一定不能被派生类重写 
3 抽象方法也可以重写父类中的虚方法  
1 都不能直接实例化
2 抽象类中的抽象方法必须全部被实现     接口中的所有方法必须全部被实现  
3 抽象类中可以有非抽象的方法,此方法子类可以直接引用     接口中不可以有自身实现的方法 

解决方案 »

  1.   

    我的认识:1、和你相同
    2、有点不同:普通方法也可以被派生类重写,只是不能使用override关键字。
    3、没理解你的意思。后面:
    1、方法不存在实例化的可能,类才能实例化为对象。
    2、“必须被全部实现”是指的什么?抽象方法本身被定义就是不打算在这里实现的。
      

  2.   

    抽象方法与虚方法与普通方法:
    1 抽象方法必须没有方法体 虚方法必须有方法体   //虚方法必须[可有可无]方法体 
    抽象方法必须被派生类中的方法实现 [当派生类不是抽象类时: 抽象方法必须被派生类中的方法实现,否则可实现也可不实现 ]
      虚方法可以被派生类中的方法重写也可以不重写直接被使用 [正确]
      普通方法一定不能被派生类重写  [可以用 new 关键字重写
    抽象方法也可以重写父类中的虚方法  [不知你的意思,]
    都不能直接实例化[只有 抽象类 才是]
    2 抽象类中的抽象方法必须全部被实现 接口中的所有方法必须全部被实现  [如果这个类也是 抽象类 就可能不去实现
    3 抽象类中可以有非抽象的方法,此方法子类可以直接引用 接口中不可以有自身实现的方法 
    正确,接口只是一个规定,规定哪个类 用这些方法,如果说类 A 实现 接口 I ,意思是说,I 接口中的规定,A中要去实现,类A 达到了接口I 所有规定 
      

  3.   

    补充一下:
     接口:
      接口只是一个规定,
       规定哪个类 有这个接口定义的方法,比如:
      如果说类 A 实现 接口 I ,
      意思是说:“I 接口中的规定,A类要去实现”,
      

  4.   

    如果说 类A 类B 都实现接口I; 如:
    public class A():I
    { ...
    }
    public class B():I
    { ...
    }
     A a = new A();
     B b = new B();////可以下面的用法,
    I i;
     i= a;//把接口 I 的规定, 接口当成是类来用,但这个接口类 的实现体 在A类中。
     i= b; //此时 i 接口 的实现体 变成了 B 类 中的现实体,//我们可以把这种方法叫做投胎换骨。
      

  5.   

    仁兄看来境界不一般,再次有几个问题还得追问
    1.虚方法的方法体真的可有可无吗,我测试的时候,没有方法体就会报错啊
    2.普通方法用派生类中的方法重写,new如何使用?我现在知道了,不加overried就可以重写。
    3.我上面第三条讲的是抽象类中的抽象方法,也可以“覆盖”其父类的虚方法,其父类可以是抽象类也可以不是抽象类,这下讲明白了吧。
    4.这一条望各个大侠一起帮忙,就是之所以会有抽象方法,虚方法,普通方法之分,它的设计思路是什么,各中类型会在执行什么操作时用到啊。求思想
      

  6.   

    楼上的几位大神,new 不叫重写,叫覆盖或者隐藏。
    麻烦别乱说好吗???
    new 和 Override 是有区别的。http://apps.hi.baidu.com/share/detail/20636236
      

  7.   

    1.虚方法的方法体真的可有可无吗?
    虚方法和普通方法一样,必须要有方法体,只不过在父类中定义的虚方法可以在子类中重写,重写时加上override关键字。2.普通方法用派生类中的方法重写,new如何使用?
    子类对父类相同的方法除了可以重写外,还可以使用new关键字对父类方法进行隐藏。至于隐藏和重写的区别,你可以看:http://topic.csdn.net/u/20120312/14/9ee753d4-61da-4b1c-981a-d4323fc61535.html3.我上面第三条讲的是抽象类中的抽象方法,也可以“覆盖”其父类的虚方法,其父类可以是抽象类也可以不是抽象类,这下讲明白了吧。
    这个我没有试过,用抽象子类重写父类的虚方法。但是由于抽象子类不能实例化,所以是这个没有意义的。只有在抽象子类的子类中再次重写才有用。4.这一条望各个大侠一起帮忙,就是之所以会有抽象方法,虚方法,普通方法之分,它的设计思路是什么,各中类型会在执行什么操作时用到啊。
    抽象方法:定义一个功能,父类只是定义要求有这样一个功能,但是具体功能的实现将,必须由子类完成。
    普通方法:实现一个功能。该功能子类不可修改。
    虚方法:实现功能的模板,可以通知子类,现在我实现了这样一个功能,但是你(子类)可以按照自己的方式实现相同的功能。
      

  8.   

    多看看MSDN,别听网上一些人胡说八道。
    http://msdn.microsoft.com/zh-cn/library/9fkccyh4.aspx
      

  9.   


    这个正确, 虚方法 的确要 方法体。   虚方法 只是在普通方法上加上一个标志,标志它的子类同名方法可以用override重写。
      

  10.   

    //这个例子是比较 override 与new 这两个重写实质 的不同点.public  class Class1
    {
    public virtual string getValueVirtual()
    {
    return "基-virtual";
    }
    public string getValue()
    {
    return "基-普通";
    }

    }
    public class Class2:Class1
    {
    public override string getValueVirtual()
    {
    return "子-override";
    }
    public new string getValue()
    {
    return "子-new ";
    }
    }
    ///运行下面
    Class2 c2 = new Class2();
    Class1 c1 = c2;
    StringBuilder sb = new StringBuilder();
    sb.AppendLine(c1.getValueVirtual());
    sb.AppendLine(c1.getValue());
    MessageBox.Show(sb.ToString(),"提示");//得到结果: 当然,以上我的复回不一定一全对的,只是代表我的看法而已, 有错就指出来。
      象[11楼 mathieuxiao] 的做法就非常好,提出我的错误,我就去验证,找正确答案。
    如果,100% 正确了,我就不会混CSDN 论坛了。 
      

  11.   

    http://msdn.microsoft.com/zh-cn/library/ms173153.aspx
    对于程序员来说,弄清楚new和Override的不同,以及它们所应该用到的地方才是重要的。追究不同的称呼干啥呢?我们不需要研究茴香豆的茴字有几种写法。