学习

解决方案 »

  1.   

    有这abstract 的方法的类不能实例化
    public protected
      

  2.   

    问题很好。区别是,abstract到了子类可以变成virtual。而,父类中,virtual的东西,是可以有实现的,abstract的,不允许有实现,无论是property还是method。new的时候父类方法无需修饰。
      

  3.   

    我的理解:
    abstract方法必須重寫才能使用。virtual方法本身是可以執行的﹐重寫是為了實現多態性。
    NEW隐藏父类方法时,父类方法必須是public或protected
      

  4.   

    凡是人都有产生后代的欲望,也就是干那个。这是一种笼统的抽象概括。-人:abstract类,干那个:abstract方法。人都有产生后代的欲望,所以都会干那个,而且干了。-virtual方法。甲生了乙,乙生了丙,突然。有个叫wdmzjjjjjj的有心向道,想成仙,终身保持童子之身,把干那个的能量逆修而成仙了。-new方法wdmzjjjjjj身上,他把祖宗传下来的干那个的本能隐藏掉了,自己实现了完全新的功能。
      

  5.   

    问题很好。区别是,abstract到了子类可以变成virtual。而,父类中,virtual的东西,是可以有实现的,abstract的,不允许有实现,无论是property还是method。new的时候父类方法无需修饰。
    上面的回答不可吗?
      

  6.   

    abstract 默认就是virtual的。
      

  7.   

    不是有个非常典型的例子嘛!你想做个画图程序。你从哪儿搞到了画线和画圆的算法。面向对象嘛,所以你就:Line line = new Line(Point from, Point to); Circle circle = new Circle(Point pt, int radius); 然后实现line.Draw(); circle.Draw();了。有一天你突然想像Photoshop一样给自己画图程序增加UnDo,ReDo功能,或者你想把所有的操作步骤写到Save到硬盘,那就需要记录下所有操作过的步骤。这些步骤是什么?是某个或者直线或者圆的一大堆对象在屏幕上到处Draw()自己。但他们的顺序、组合是不确定的。那有没有办法统一管理他们?线、圆都是什么?都是图形(Shape)啊。他们还有什么共同点?就是画Draw();能不能抽像出个类?合不合理?
    abstract class Shape
    {
    abstract void Draw();
    }
    为啥abstract?你说Shape这东西是什么?它不是具体的方啊圆啊的,是个抽象的东西。没法给他实现什么。class Line : Shape
    {
    pubic virtual void Draw(); 
    }
    Class Circle : Shape ...Shape s1 = new Line(pt1, pt2);
    s1.Draw(); // 会调用什么?
    Shape s2 = new Circle(pt1, radius);
    s2.Draw(); // 会调用什么?Shape[] arrShape = new Shape[10];
    Shape[0] = new Line(pt1, pt2);
    Shape[1] = new Circle(pt1, radius);
    ....
    for(int i = 0; i < 10; i++)
       arrShape.Draw(); // 不好玩吗?改成集合
    ArrayList li = new ArrList();
    li.Add(new Circle(pt1, radius));
    li.Add(new Line(pt1, pt2);
    ...
    foreach(Shape s in li)
       s.Draw(); //不好玩吗?foreach(Shape s in li)
      s.SaveToDisk(); //成不成?//UnDo
    ClearScreen();
    for(int i = 0; i < li.length -1; i++)
      s.Draw(); //多好?后来又搞到了画方块的算法,想加进自己系统。只要满足什么条件就行?只要从Shape继承,实现Draw()就行啦。多好啊,用abstract让你的程序有了Potential可扩展性,性,嘿嘿。六角型是六个点,也许他能从画方块Rectangle类继承(不知道实际上是不是这样,管他呢,就当是吧)。Rectangle为什么要用virtual?六角型override它的Draw()提供了自己的方法,想一想,好不好玩?不好玩?abstract多TM好玩啊!
      

  8.   

    abstract方法必須重寫才能使用。virtual不要重写就可以用了.
    这个就是差别
    abstract (有点接口的意思吧,反正是不知道要什么实现.实现有继承的单位去执行)
    上面的人都已经回答好了啊
      

  9.   

    好,不用抽象类。
    一个车Car,你定义了它的某个方法里实现了加速度为speed+=1;
    你从这个Car类继承了自行车的轿车,并且override了加速度的方法。
    自行车的加速度是speed+=5,轿车的加速度是speed+=20,挺合理的,好像。
    不过,想想两个问题:
    1。Car实现speed+=1有没有意义?实际上系统中我们从来不会调用它speed+=1的方法。实现它干吗?
    2。假如继承类中没有实现(比如轿车忘了实现speed+=20)override,那么轿车会自动调用基类的方法speed+=1,轿车比自行车还慢,成何体统!
      

  10.   

    错别字真多,重写:不用抽象类。
    定义一个Car类,在它的某个方法里实现了加速度为speed+=1;
    你从这个Car类继承了自行车和轿车,并且override了加速度的方法。
    自行车的加速度是speed+=5,轿车的加速度是speed+=20,挺合理的,好像。
    不过,想想两个问题:
    1。Car实现speed+=1有没有意义?实际上系统中我们从来不会调用它speed+=1的方法。实现它干吗?
    2。假如继承类中没有实现(比如轿车忘了实现speed+=20)override,那么轿车会自动调用基类的方法speed+=1,轿车比自行车还慢,成何体统!
      

  11.   

    abstract与override的目的是为了重写,以适应不同的对象,调用同名方法,得出不同的结果
      

  12.   

    abstract方法一定要放在abstract类中,virtual可以放在任何类中.abstract类跟interface相似,最大的好处是:你不需要知道其方法具体的实现,只要知道有这样的方法就可以了.比如:
    定义一个抽象的"动物类",其中有一个"呼吸"的抽象方法(因为不同的动物可能有不同的呼吸方法,所以你不必马上实现这个方法),然后你可以派生出"两栖动物","哺乳动物"...这个时候,你就可以分别重写"呼吸"这个方法了.最后,好处来了:动物类 p1 = new 两栖动物();
    动物类 p2 = new 哺乳动物();
    p1.呼吸(); //看这里
    p2.呼吸(); //看这里
      

  13.   

    namhyuk(namhyuk),最后说了,我才理解,真是太好了..谢谢.另外,使用接口和直接使用类,有什么区别????????
      

  14.   

    问一个abstract,居然从干搞到了性,你们太强了
      

  15.   

    hl_ws(一水) 的说法简洁、明了.
      

  16.   

    其实abstract和virtual的区别是很明显的,abstract是必须override的,virtual则可以选择是不是override。举个例子,所有的动物都会吃东西。嗯,那动物是怎么吃东西的?谁知道?没有谁知道,因为这个动物可以是鸟,它用喙啄食,也可以是猪肉绦虫和蚯蚓什么的……所以对于动物而言,吃就是抽象的,无法描述的,或者说无法实现的。也就是动物类的吃方法必须是abstract的……。但是对于具象一点儿,例如动物的派生类猪,我们就可以知道它是怎么吃东西的了……。
      

  17.   

    既然说到了抽象类,那就也来说说接口的概念吧,接口和抽象类很类似甚至很多时候都可以互相替换使用,但区别也很明显,
    还是继续"干"这个话题,比如男人要干的时候有时候要带TT,有时需要用BYY,有时候不用,抽象类中定义了男人"干"这个方法,但并没有定义"安全措施"这个方法
    因为很多时候因为要爽,所以不使用"安全措施",但也有小心的人,那么"接口"浓重登场,在接口中定义"安全措施"这个方法,
    至于是要用TT,还是BYY那就看个人喜好了,但是和尚和要成仙的楼主一辈子都不会干,那"安全措施"对他来说没用,
    所以和尚和楼主就没有"安全措施"这个方法.
    接口的概念通俗点说就是能让一个类实现多重继承,本来功能很单一的一个类,
    可以通过接口的扩展来实现父类所不能实现的功能(比如:"安全措施")
    :)