继承就不用说了,多态呢,我觉得可以分为两种: 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)); 这就是通过方法的重写来实现的多态。 这些只是我的个人理解!
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));
这就是通过方法的重写来实现的多态。
这些只是我的个人理解!
这个说法看似专业,其实就如同说结婚就是ooxx一样荒谬。很简单,OOPL不一定是编译型语言,那么怎么“连编”?
代码重用:父类有的东西.子类可以直接用,不需要再写.. /相反不使用继承 有可能代码重复 扩展: 在父类的基础上,用子类进行扩展出新的 / 有一种层次结构关系.分析清晰. /相反不使用继承 有可能结构混乱. 如: .net里面.所有的类型.都是直接或者间接继承System.Object类型
继承.有可能是多层的..父类的上面有可能还有父类. 如何继承:
class 类名:父类名{}
要注意:
不要过度继承. 过度继承,依赖性就太强了. 改一下基类.会影响下面的所有子类.
任何类.如果不密封.都有可能被其他类继承
构造函数执行顺序: 先执行父类的构造函数,再执行子类的构造函数 调用基类的构造函数.用base关键字sealed 密封的类
添加 sealed 修饰符后,该类就不允许被继承了. 它就不能再有子类了. 禁止派生,禁止扩展.
类的成员 添加访问修饰符: protected 类和子类能访问.
我可以说,什么“连编”之类理论的人,都是受它们前辈——用C++那拨菜鸟的影响产生的新生代菜鸟。如果从编程语言史的角度看,OOPL之前肯定没有OOPL,因此,像C++之类的早一代的编程语言,他们通过对非OOPL语言,比如C语言实现的改进来实现OOP。你可以看到什么vtable,什么动态连编,什么this指针之类的东西。这些东西只是打着非OOPL烙印的东西,和OOP一点关系都没有。如果你去看早期福特公司造出的汽车,你会发现他们使用和自行车以及马车一样的轮胎。你不能得出结论,汽车就是装上了蒸汽机的马车——实际上现在的汽车既没有马车的痕迹,也不用蒸汽机了。
http://wenku.baidu.com/view/4d23aa649b6648d7c1c746f1.html
代码重用:父类有的东西.子类可以直接用,不需要再写.. /相反不使用继承 有可能代码重复
使用继承可以避免代码重复吗?
(1)如果你使用单继承的语言,比如C#,如果你为了“重用”而继承一个类,那么你也只能继承一个类,如果你需要“重用”很多类的代码,你只能舍弃其它了?
(2)abc三个人分别从一个基类继承了一个对象,并且扩展了一些功能,这些功能重复怎么办?
(3)你可能要说,我把这些公共的提取到基类不就可以了?
好的,我们看:
我们有一个类叫,鸟类,然后麻雀、喜鹊从鸟类继承,并且各自实现了飞这个方法。你觉得你可以把飞丢给基类么?那你凭什么让企鹅也莫名其妙地具有了飞这个方法?
(3)你可能要说,我把这些公共的提取到基类不就可以了?
既然是公共的,就不会有特例的存在,既然有特例的存在,那就不会把这个方法放在基类里。
那么企鹅是特例,那我就不会把飞这个方法放在基类里面了!
我可以让基类包含所有鸟类Bird能实现的方法,让会飞的鸟类FlayBird来继承Bird,扩展实现飞这个方法,让不会飞的鸟类CannotFlayBird直接继承这个鸟类不就行了吗!