涉及到的关键字
- virtual 基类里声明虚方法
- override 派生类重写基类的虚方法,是多态的关键技术
- new 派生类覆盖基类的方法(无论是否为虚方法)
- base 派生类显式调用基类的非默认构造函数
- abstract 声明抽象类或抽象方法
- sealed 声明密封类和密封方法
基础
C# 不支持多重继承,一个类只能有一个直接基类。重写、覆盖的问题都来自于基类的引用来引用派生类实例的情况。
继承、封装和多态是面向对象编程的三个基本要素。
其成员被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。
派生类隐式获得基类的除构造函数和析构函数以外的所有成员。
派生类只能有一个直接基类,所以C#并不支持多重继承,但一个基类可以有多个直接派生类。继承是可以传递的。 即:
如果 ClassB 派生出 ClassC,ClassA 派生出 ClassB,则 ClassC 会继承 ClassB 和 ClassA 中声明的成员。
class
A
{
public void Sum( int i, int j)
{
int sum = i + j;
Console.WriteLine( " I am A ,my sum ={0} " ,sum);
}
}
class B : A
{
public void Minus( int i, int j)
{
int minus = i - j;
Console.WriteLine( " I am B ,my minus ={0} " , minus);
}
class InheritanceTest1
{
static void Main( string [] args)
{
B b = new B();
b.Minus( 3 , 4 );
Console.Read();
}
}
{
public void Sum( int i, int j)
{
int sum = i + j;
Console.WriteLine( " I am A ,my sum ={0} " ,sum);
}
}
class B : A
{
public void Minus( int i, int j)
{
int minus = i - j;
Console.WriteLine( " I am B ,my minus ={0} " , minus);
this.Sum(3, 4);
}
}
class InheritanceTest1
{
static void Main( string [] args)
{
B b = new B();
b.Minus( 3 , 4 );
Console.Read();
}
}
结果:I am B ,my minus=-1
I am A ,my sum =
7
经过本人测试,没有在B类找到该方法,那么是不是它就没有被继承呢? 其实不是的,私有成员其实已经被继承了,