面向对象有三大特色:多态、继承和封装,我们已经熟悉的不能再熟悉了,然而在c#中要怎么用呢?现在就着重总结一下继承。
在很早之前就听他们说VB并不是真正的面向对象,它是一种面向过程的设计语言,在学习C#的这些日子里,逐渐明白了面向对象是怎么一回事。在以前我们敲代码的时候是一个功能一个功能的实现,而现在我们是要将里面用到的词抽象出来。对于学生信息系统,我们要完成学生上机的代码就要在里面加入功能,而面向对象是将学生类、老师类抽象出来。
现在就看一下多态,多态之前在讲UML的时候就已经被提到过,当发出弹奏的命令时,小提琴、钢琴等乐器都会弹奏,但是演奏的形式是不同的(小提琴是要拉、钢琴是要弹的)。
继承
对于人类、老师类、学生类都有年龄、性别、年龄等属性,我们无需再每一个类中都重复写这些代码,我们可以把相同的东西抽象出来,抽象出一个父类,然后子类继承即可。子类也叫作派生类,父类也叫作基类。而Object 类是所有类的父类。
继承两大特性
1传递性 子类继承父类的时候 子类中的值可以传到父类中
2单根性 父类只有一个,子类可以有很多个
调用构造函数
<span style="font-size:18px;">Public class Teacher:Person
{
Public Teacher(string name,int age,char gender)
This.Name=name;
This.age=18;
}
</span>
我们还见过在后面加:Base(参数的情况)
加入base后和父类相同的姓名、性别属性可以不再加了,写子类特有的就可以。
修饰符
Protected 访问修饰符不允许其他非子类访问。也就是只能在子类间可以使用。
重写
子类和父类都有相同的函数名的时候,可以用重写方法
父类中声明虚方法
Public virtual double Show()
{
}
子类重写
Public override double Show()
{
}
和重写很类似的是 抽象类和抽象方法的运用
抽象类的声明
<span style="font-size:18px;">Public abstract class Animal
{
public abstract void shout();
}</span>
抽象方法的特性
抽象方法没有方法体
抽象类可以有非抽象成员
抽象方法必须放在抽象类中
抽象类只能做基类无法实例化
子类必须要对父类中的抽象方法进行重写
虚方法 VS 抽象方法
既然子类都可以重写父类的方法,那么抽象方法和虚方法有什么不同呢?
抽象方法和虚方法的区别在于:虚拟方法有一个实现部分,并为派生类提供了覆盖该方法的选项,相反,抽象方法没有提供实现部分,强制派生类覆盖方法(否则 派生类不能成为具体类);
abstract方法只能在抽象类中声明,虚方法则不是;
abstract方法必须在派生类中重写,而virtual则不必;
abstract方法不能声明方法实体,虚方法则可以。
我对于抽象类的理解举例来说:动物都会叫,但是叫的方式不同,在父类中你不能规定怎样叫,只能声明一种会叫的方法,方法实体中不会声明具体行为。