现在的位置: 首页 > 综合 > 正文

继承

2014年01月12日 ⁄ 综合 ⁄ 共 1594字 ⁄ 字号 评论关闭

继承(加上封装和多态性)是面向对象的编程的三个主要特性(“支柱”)之一。继承用于创建可重用、扩展和修改在其他类中定义的行为的新类。其成员被继承的类称为“基类”,继承这些成员的类称为“派生类”。

定义一个类从其他类派生时,派生类隐式获得基类的除构造函数和析构函数以外的所有成员。因此,派生类可以重用基类中的代码而无需重新实现这些代码。可以在派生类中添加更多成员。派生类以这种方式扩展基类的功能。

C#中提供了类的继承机制,但只支持单继承,而不支持多继承,即在C#中一次只允许继承一个类,不能同时继承多个类。

派生类对基类成员的访问:

派生类可以访问基类的公共成员、受保护成员、内部成员和受保护内部成员。即使派生类继承基类的私有成员,仍不能访问这些成员。但是,所有这些私有成员在派生类中仍然存在,且执行与基类自身中相同的工作。例如,假定一个受保护基类方法访问私有字段。要使继承的基类方法正常工作,派生类中必须有该字段。

为了解决基类成员访问问题,C#还提供了另外一种可访问行:protected。只有子类(派生类)才能访问protected成员,基类和外部代码都不能访问protected成员。

除了成员的保护级别外,还可以为成员定义其继承的行为。基类的成员可以是虚拟的,成员可以由继承它的类重写。子类(派生类)可以提供成员的其它执行代码,这种执行代码不会删除原来的代码,仍可以在类中访问原来的代码,但外部代码不能访问他们。如果没有提供其它执行方式,外部代码就直接访问基类中成员的执行代码。

另外,基类还可以定义为抽象类。抽象类不能直接实例化,要使用抽象类就必须继承这个类,然后再实例化。

base 表示当前对象基类的实例(使用base关键字可以调用基类的成员),this表示当前类的实例

在静态方法中不可以使用base和this关键字。

派生类会继承基类所有的成员,但是构造函数和析构函数不会被继承。

注意:如果派生类的方法和基类的方法同名,则基类中的方法将会被隐藏。如果需要隐藏则可以使用关键字new来隐藏如果不写new关键字,默认处理为隐藏。虽然基类中同名的方法被隐藏了,但是还是可以通过base关键字来调用。

例1:简单继承

class Program
{
static void Main(string[] args)
{
//实例化Test2子类
Test2 ts2 = new Test2();
//可以调用基类的Print方法
ts2.Print();
Console.WriteLine();
//调用自己的Show方法
ts2.Show();
Console.Read();
}
}

//基类
class Test
{
int num1, num2;
public Test()
{
num1 = 1;
num2 = 2;
}
public void Print()
{
Console.WriteLine("------------------------------");
Console.WriteLine("{0} + {1} = {2}", num1, num2, num1 + num2);
Console.WriteLine("我是基类的Print方法/n------------------------------");
}
}

//子类
class Test2 : Test
{
//如果子类方法的方法名和基类的方法名相同时,系统将隐藏基类同名方法,自动调用子类的同名方法
public void Show()
{
Console.WriteLine("------------------------------");
//派生类会继承基类所有的成员,但是不能显示调用基类的是有成员
//在派生类中不可以调用基类的是有成员,如num1,num2,但是可以实现调用基类方法
Print();
Console.WriteLine("我是子类的Show方法/n------------------------------");
}
}

【上篇】
【下篇】

抱歉!评论已关闭.