继承和多态的具体含义是什么?

解决方案 »

  1.   

    继承就不用说了,多态呢,我觉得可以分为两种:
    1、编译时的多态:通过重载方法来实现,重载方法就是同一个类中定义一系列同名方法,但方法的参数列表不同。在编译时,按照普通方式,也就是参数列表选择要调用的方法。这个属于静态绑定。
    2、运行时的多态性:动态绑定,直到运行时,才根据实际情况决定实现何种操作(继承),这个主要通过方法的重写。
    比如我有一个类Test
        class Test
        {
            public int Method(int num1)
            {
                num1 = -num1;
                return num1;
            }
            public int Method(int num1, int num2)
            {
                num1 = num1 + num2;
                return num1;
            }
        }
    在主方法中:
                Test t = new Test();
              Console.WriteLine(t.Method(11));
              Console.WriteLine(t.Method(11, 12));
    这个就是通过重载实现的多态。
    如果父类Test有两个子类继承它:
        class Test
        {
            public virtual int Method(int num1, int num2)
            {
                return 0;
            }
        }
        class Add : Test
        {
            public override int Method(int num1, int num2)
            {
                return num1+num2;
            }
        }
        class Sub : Test
        {
            public override int Method(int num1, int num2)
            {
                return num1 - num2 ;
            }
        }
    在主方法中
                  Test add = new Add();
                Test sub = new Sub();
                Console.WriteLine(add.Method(13, 2));
                Console.WriteLine(sub.Method(13, 2));
    这就是通过方法的重写来实现的多态。
    这些只是我的个人理解!
      

  2.   


    这个说法看似专业,其实就如同说结婚就是ooxx一样荒谬。很简单,OOPL不一定是编译型语言,那么怎么“连编”?
      

  3.   

    我说了,错误不在你那专业的老师,而是在于,没有OOP思想的学生,不可能正确理解,无论老师怎么说。多态的实现也好,表现手段也好,语法现象也好,都只是多态的一方面。还是那个比方:孩子问家长,什么叫结婚。家长说,结婚就是父母在一起生活。这个说法没有错,但是很片面。孩子不理解,听了还是不理解。比如为什么父母要生活在一起?为什么姐弟生活在一起不算结婚?等等。如果你真的想学习,就耐心慢慢学,慢慢体会,不是“说一说”就能解决的。
      

  4.   

    重载就是重载,叫什么编译时多态?跟OOP有什么关系?
      

  5.   

    什么叫多态?多态的动机就是,向用户隐藏底层实现的差异,使得用户关注于高层次的逻辑概念。比如说,汽车上,油门是大家都知道的部件。油门的作用是使车辆加速。早期的油门,是直接控制喷油嘴的,也就是给油的多少。而现在的汽车,油门其实控制的是节气门的开闭程度,通过控制给燃料室送入的空气,也可以干预发动机的燃烧情况,来控制动力输出。那么什么叫多态?对于一个司机来说,无论他驾驶以前的汽车,还是现在的汽车,他都可以不用额外的学习就能掌握。如果你一个人写程序,自然没有这样的感受,你只有一个用户,就是“最终用户”。当你们是一个团队,那么,有可能,你的代码,是给另一个人调用的。你可以认为,那个调用你代码的开发者,也是用户。那么,你如何设计好的代码,使得他使用你的代码感觉轻松呢?如果你有这样的经历,你自然就会去想一些实践,当然不局限在OOP上。
      

  6.   

    继承的作用:
     代码重用:父类有的东西.子类可以直接用,不需要再写..      /相反不使用继承  有可能代码重复 扩展:  在父类的基础上,用子类进行扩展出新的         / 有一种层次结构关系.分析清晰.                     /相反不使用继承  有可能结构混乱. 如:  .net里面.所有的类型.都是直接或者间接继承System.Object类型
    继承.有可能是多层的..父类的上面有可能还有父类.  如何继承:
    class 类名:父类名{}
     要注意:  
    不要过度继承.   过度继承,依赖性就太强了.  改一下基类.会影响下面的所有子类.
     任何类.如果不密封.都有可能被其他类继承
    构造函数执行顺序:   先执行父类的构造函数,再执行子类的构造函数  调用基类的构造函数.用base关键字sealed   密封的类 
    添加 sealed 修饰符后,该类就不允许被继承了. 它就不能再有子类了. 禁止派生,禁止扩展.
     类的成员 添加访问修饰符: protected 类和子类能访问.
      

  7.   


    我可以说,什么“连编”之类理论的人,都是受它们前辈——用C++那拨菜鸟的影响产生的新生代菜鸟。如果从编程语言史的角度看,OOPL之前肯定没有OOPL,因此,像C++之类的早一代的编程语言,他们通过对非OOPL语言,比如C语言实现的改进来实现OOP。你可以看到什么vtable,什么动态连编,什么this指针之类的东西。这些东西只是打着非OOPL烙印的东西,和OOP一点关系都没有。如果你去看早期福特公司造出的汽车,你会发现他们使用和自行车以及马车一样的轮胎。你不能得出结论,汽车就是装上了蒸汽机的马车——实际上现在的汽车既没有马车的痕迹,也不用蒸汽机了。
      

  8.   

    我觉得这个例子不怎么样!如果不是初学者大家可以看看这个,我也是刚看见的
    http://wenku.baidu.com/view/4d23aa649b6648d7c1c746f1.html
      

  9.   

    这又是一个不理解只会被背概念的人。难道你在学习过程中就没有一点点思考么?我只说一条:
    代码重用:父类有的东西.子类可以直接用,不需要再写.. /相反不使用继承 有可能代码重复
    使用继承可以避免代码重复吗?
    (1)如果你使用单继承的语言,比如C#,如果你为了“重用”而继承一个类,那么你也只能继承一个类,如果你需要“重用”很多类的代码,你只能舍弃其它了?
    (2)abc三个人分别从一个基类继承了一个对象,并且扩展了一些功能,这些功能重复怎么办?
    (3)你可能要说,我把这些公共的提取到基类不就可以了?
    好的,我们看:
    我们有一个类叫,鸟类,然后麻雀、喜鹊从鸟类继承,并且各自实现了飞这个方法。你觉得你可以把飞丢给基类么?那你凭什么让企鹅也莫名其妙地具有了飞这个方法?
      

  10.   

    企鹅的那个例子:
    (3)你可能要说,我把这些公共的提取到基类不就可以了?
    既然是公共的,就不会有特例的存在,既然有特例的存在,那就不会把这个方法放在基类里。
    那么企鹅是特例,那我就不会把飞这个方法放在基类里面了!
    我可以让基类包含所有鸟类Bird能实现的方法,让会飞的鸟类FlayBird来继承Bird,扩展实现飞这个方法,让不会飞的鸟类CannotFlayBird直接继承这个鸟类不就行了吗!
      

  11.   

    caozhy 你还真别说,微软有些类的tostring()得到的只是一条长长的类型..我感觉是没什么用的.
      

  12.   

    很多时候我们继承也没有重写tostring吧..得到的也是没什么意义的东西..就像企鹅..有飞的方法也是没什么的.至少让别人知道它曾经是可以飞的.