一、继承
继承是面向对象语言的特征,是实现代码复用的手段。继承不但可以使用现有类的所有功能,还可以对这些功能进行扩展。
1、继承的实现
语法形式:
[属性集信息][类修饰符] class 派生类:基类
{
[派生类成员]
}
例如:
public class Sharpe //定义图形类Shape
{
protected string Color
public Shape() //无参数构造函数
{}
public Shape(string Color) //构造函数
{
this.Color=Color;
}
}
public class Circle:Shape //定义圆类,从Shape类中派生
{
private double Radius;
public Circle(string Color,double Radius)
{
this.Color=Color; //圆的颜色
this.Radius=Radius; //圆的半径
}
}
2、base关键字
实际上,上例中Circle调用的是父类中的无参数构造函数,而不是有参数的构造函数。关键字base的作用是调用Shape类的构造函数,并将Circle类的变量初始化。base关键字除了能调用基类的构造函数,还可以调用基类的方法。
上例中的Circle也可以写成:
public class Circle:Shape
{
private double Radius;
public Circle(string Color,double Radius):base(Color)
{
this.Color=Color;
this.Radius=Radius;
}
}
二、多态
多态也是面向对象语言的特征之一,指在程序执行之前无法根据函数名和参数确定调用哪一个操作而在程序运行过程中,根据实际运行情况动态确定。
1、虚方法的重载
在类的方法前加上关键字virtual,则该方法被称为虚方法。通过对虚方法的重载,实现在程序运行过程中确定调用的方法。
例如:
public virtual double Getval()
{
return 0.0;
}
在Circle类中对虚拟方法重载:
public override double GetVal()
{
return System.Math.PI*radius*radius;
}
2、抽象类和抽象方法
抽象类是一种特殊的基类,并不与具体的事物联系。抽象类的定义使用关键字abstract。
例如:
public abstract class Shap //定义抽象类
{}
在抽象类中也使用关键字abstract定义抽象方法,要求所有的派生非抽象都要重载实现抽象方法。
例如:
public abstract double GetArea(); //抽象类中定义抽象方法
派生类重载实现
public override double GetArea()//在派生类中重载抽象方法
{}
3、密封类和密封方法
抽象类只能作为基类,由其他类继承,不能被实例化。相对应的还有一种不能被其他类继承的类,叫做密封类,用sealed关键字。
例如:
public sealed class Rectangular:Shape //定义密封类Rectangular
{}
这样Rectangular派生的类就不再保留,否则,就会出错。
如果类的方法声明包含sealed修饰符,该方法称为密封方法。类的实例方法声明包含sealed修饰符,必须同时用override修饰符。
例如:
public virtual double GetArea()
{}
public sealed override double GetArea()
{}