黑马程序员--面向对象之继承与多态
2013-05-18 15:59
337 查看
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
继承是OOP最要的特性之一。任何类都可以从另一个类中继承,这就是说,这个类拥有它
继承的类的所有成员。在OOP中,被继承(也称为派生)的类称为父类(也称为基类)。
C#中的对象仅能直接派生于一个基类,当然基类也可以由自己多基类。
在继承一个基类是,成员的可访问性就成了一个重要的问题。派生类不能访问基类的私有成员,但可以访问器公共成员。
基类的成员可以是虚拟的,也就是说,成员可以由继承它的类重写。派生类可以提供成员的其他实现代码。
基类还可以定义为抽象类。
抽象类不能直接实例化。要使用抽象类,必须继承这个类,抽象类可以有抽象成员,
这些成员在积累中没有实现代码,这些实现代码必须在派生类中提供。
当然抽象基类可以提供成员的实现代码,这是很常见的。
不能实例化抽象类,并不意味着不能再抽象类中封装功能。
类可以是密封。密封的类不能用作基类,所以没有派生类。
在C#中,所有的对象都有一个共同的基类object
继承的一个结果是派生于基类的类在方法和属性上有一定的重叠,因此,可以使用相同的语法处理从同一个基类实例化的对象。
如例中基类Animal有一个EatFood()方法,则从派生于它的类Cow和Chicken中调用这个方法,其语法是类似的:
多态性则更推进了一步。可以吧某个派生类型的变量赋给基本类型的变量,例如:
不需要进行强制类型转换,就可以通过这个变量调用基类的方法:
结果是调用派生类中的EatFood()的实现代码。注意,不能以相同的方式调用派生类上定义的方法,下面的代码不能运行:
但是可以吧基本类型的变量转换为派生类变量,调用派生类的方法,如下所示:
在派生于同一个类的不同对象上执行任务时,多态性是一种极有效的技巧,其使用的代码最少。
注意并不是只有共享同一个父类的类才能利用多态性。只要子类和孙子类在继承层次结构中有一个相同的类,
他们就可以用同样的方式利用多态性。
从一个派生类中实例化的所有对象都可以看做是其父类的实例。
继承是OOP最要的特性之一。任何类都可以从另一个类中继承,这就是说,这个类拥有它
继承的类的所有成员。在OOP中,被继承(也称为派生)的类称为父类(也称为基类)。
C#中的对象仅能直接派生于一个基类,当然基类也可以由自己多基类。
在继承一个基类是,成员的可访问性就成了一个重要的问题。派生类不能访问基类的私有成员,但可以访问器公共成员。
基类的成员可以是虚拟的,也就是说,成员可以由继承它的类重写。派生类可以提供成员的其他实现代码。
基类还可以定义为抽象类。
抽象类不能直接实例化。要使用抽象类,必须继承这个类,抽象类可以有抽象成员,
这些成员在积累中没有实现代码,这些实现代码必须在派生类中提供。
当然抽象基类可以提供成员的实现代码,这是很常见的。
不能实例化抽象类,并不意味着不能再抽象类中封装功能。
类可以是密封。密封的类不能用作基类,所以没有派生类。
在C#中,所有的对象都有一个共同的基类object
class Animal { public void EatFood() { } public void Breed() { } } class Cow:Animal { public void Moo() { } public void SupplyMilk() { } } class Chicken : Animal { public void Cluck() { } public void LyaEgg() { } }
继承的一个结果是派生于基类的类在方法和属性上有一定的重叠,因此,可以使用相同的语法处理从同一个基类实例化的对象。
如例中基类Animal有一个EatFood()方法,则从派生于它的类Cow和Chicken中调用这个方法,其语法是类似的:
Cow myCow = new Cow(); Chicken myChicken = new Chicken(); myCow.EatFood(); myChicken.EatFood();
多态性则更推进了一步。可以吧某个派生类型的变量赋给基本类型的变量,例如:
Animal myAnimal = myCow;
不需要进行强制类型转换,就可以通过这个变量调用基类的方法:
myAnimal.EatFood();
结果是调用派生类中的EatFood()的实现代码。注意,不能以相同的方式调用派生类上定义的方法,下面的代码不能运行:
myAnimal.Moo();
但是可以吧基本类型的变量转换为派生类变量,调用派生类的方法,如下所示:
Cow myNewCow = (Cow)myAnimal; myNewCow.Moo();
在派生于同一个类的不同对象上执行任务时,多态性是一种极有效的技巧,其使用的代码最少。
注意并不是只有共享同一个父类的类才能利用多态性。只要子类和孙子类在继承层次结构中有一个相同的类,
他们就可以用同样的方式利用多态性。
从一个派生类中实例化的所有对象都可以看做是其父类的实例。
相关文章推荐
- 黑马程序员--------java面向对象 继承、接口、多态、Object类
- 黑马程序员_面向对象_继承多态
- 黑马程序员----面向对象设计的封装、继承、多态特性
- 黑马程序员—java面向对象总结(3)—面向对象继承、多态特性
- 黑马程序员——Java面向对象(二)之封装、继承、多态、接口等
- 黑马程序员_面向对象_继承和多态
- 黑马程序员---java面向对象 封装, 继承, 多态
- 黑马程序员_面向对象2_(继承、多态、抽象类abstract、接口interface、内部类)
- 黑马程序员——Java面向对象封装继承多态
- 黑马程序员---【OC语言】04面向对象之继承与多态
- 黑马程序员-面向对象中的继承与多态
- 黑马程序员--------面向对象继承和多态
- 黑马程序员——java面向对象之封装、继承、多态
- 黑马程序员_java面向对象总结【3】(继承、接口和多态)
- 黑马程序员——Java面向对象之继承与多态笔记
- 黑马程序员——Java面向对象(二)—继承、final、多态
- 黑马程序员 04 面向对象_继承_抽象_多态
- 黑马程序员 面向对象特征 封装、继承、多态总结
- 黑马程序员-博客 (3) 面向对象一之类和对象、成员变量和局部变量、继承、封装、多态
- 黑马程序员_面向对象二(继承,多态,抽象类abstract,接口Interface,内部类)