日期:2014-05-18  浏览次数:20888 次

关于"继承"与"多态"的关系,我们到底理解了有多少.
RT:有例证更好~~

为便于统一开展讨论,先给一个空壳

C# code

using System;

namespace PCTestC
{
    public class Class0
    {

    }

    public class Class1 : Class0
    {

    }

    public class Class2 : Class1
    {

    }

    public class Class3 : Class2
    {

    }

    public class Class4 : Class3
    {

    }

    public class Class5 : Class4
    {

    }

    public class Class6 : Class5
    {

    }

    public class Test
    {
        static void Main()
        {
            //Begin
            Console.WriteLine("Begin!");

            //End
            Console.ReadKey();
        }
    }
}



------解决方案--------------------

------解决方案--------------------
What do you want to express via this stub?
------解决方案--------------------
没看出你提的问题在哪里,就是谈继承和多态的关系吗?
继承是为了复用,多态是为了解耦。能够复用,并且解除了耦合,那么面向对象就能够高效的应对需求的变化。
------解决方案--------------------
什么乱七八糟的
------解决方案--------------------
继承懂点,不过多态有点模糊
------解决方案--------------------
了解这些东西是必须的,但实际工作中基本用不上。
------解决方案--------------------
反正这一块是挺麻烦的
------解决方案--------------------
To pcnetman888:
[1]空:自然继承 
[2]abstract void fun():抽象方法 
[3]void fun():隐式重写 
[4]new void fun():显式重写 
[5]virtual void fun():虚方法 
[6]new virtual void fun():重写的虚方法 
[7]override覆写 

这里你说的重写应叫做隐藏,你说的覆写才叫做重写。
------解决方案--------------------
我把楼主的问题完全看懂了,原来只要最后一个class就可以了。
------解决方案--------------------
我怎么看不到问题
------解决方案--------------------
探讨
继承是多态的基础,
没有继承,跟本谈不上多态.

先讲一些初级的大道理:(虽然代码胜于道理...看来不讲不行)
------------------------
多态定义:同一操作,作用于不同的对象,产生不同的结果。
多态分类:编译时的多态性,运行时的多态性。
多态实现:
编译时的多态性=>编译时己经确定,通过"重载"实现。(比较特殊的有静态调用时,以精确为标准的"判定"规则)
运行时的多态性=>系统运行时,根据实际情况决定实现何种操作,通过覆写虚成员实现。

多态体现在继承上的,方法的修饰:
一般书本就提四大概念(略):重载,覆写,虚方法和抽象方法。(重载先不提)
我这里会分拆到"七种"情况:
--------------
[1]空:自然继承
[2]abstract void fun():抽象方法
[3]void fun():隐式重写
[4]new void fun():显式重写
[5]virtual void fun():虚方法
[6]new virtual void fun():重写的虚方法
[7]override覆写

另外,可以研究一下C#与其它语方(C++/java)在多态实现上的差异
可以讨论一下

多态性不仅对派生类很重要,对基类也很重要
也可以加以讨论

多态性、继承直接影响了类型转换(显式和隐式的)
类型转换是一个更大的课题。

我的观点是:(Yes/No)
多态、继承、转换互相之间是紧密联系着,想在深入理解C#这个语言,
这三者是重点也是难点(抛开语言层面之外的因素来说)

我的问题本来就是开放性的,
有意参加讨论的,欢迎。
自认为水平很高的,就免了.

大家都是出来混的,不容易,希望少一些废话,多一些实质的内容。
最好是通过code来表达...

------解决方案--------------------
15楼的问题,首先得说清“等价”的含义是什么。因为既然有不同的标识符,他们就不可能是等价的。
------解决方案--------------------
我是从派生类方法隐藏了基类的那个帖子过来的。还是感谢楼主,一直就想好好思考这些概念。
------解决方案--------------------
探讨
引用:
我怎么看不到问题

--------------
还是先出个题吧
--------------
interface IC1 { }
interface IC2 : IC1 { }
class A1 : IC1 { }
class A2 : IC1, IC2 { }
class B1 : A1 { }