C#中的继承(一)
来源:互联网 发布:没实体店怎么开淘宝店 编辑:程序博客网 时间:2024/04/29 22:06
百科里关于继承的解释:
一、常见的解释
1.接续前人未完的事业。
2.承继死者的遗产或权利。
二、编程中的术语
“继承”是面向对象软件技术当中的一个概念。如果一个类B继承自另一个类A,就把这个B称为"A的子类",而把A称为"B的父类"。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。
这里给出类A和类B,具体说明请见注释:
类A:
public class A
{
public virtual void Fun1()
{
Console.WriteLine("A的第一个儿子");
}
public virtual void Fun2()
{
Console.WriteLine("A的第二个儿子");
}
public virtual void Fun3()
{
Console.WriteLine("A的第三个儿子");
}
public virtual void Fun4()
{
Console.WriteLine("A的第四个儿子");
}
public void Fun5()
{
Console.WriteLine("A的第五个儿子");
}
public void Fun6()
{
Console.WriteLine("A的第六个儿子");
}
public void Fun7()
{
Console.WriteLine("A的第七个儿子");
}
public void Fun8()
{
Console.WriteLine("A的第八个儿子");
}
}
{
public virtual void Fun1()
{
Console.WriteLine("A的第一个儿子");
}
public virtual void Fun2()
{
Console.WriteLine("A的第二个儿子");
}
public virtual void Fun3()
{
Console.WriteLine("A的第三个儿子");
}
public virtual void Fun4()
{
Console.WriteLine("A的第四个儿子");
}
public void Fun5()
{
Console.WriteLine("A的第五个儿子");
}
public void Fun6()
{
Console.WriteLine("A的第六个儿子");
}
public void Fun7()
{
Console.WriteLine("A的第七个儿子");
}
public void Fun8()
{
Console.WriteLine("A的第八个儿子");
}
}
类B,继承自类A:
public class B:A
{
//通过override重写基类中的虚方法Fun1
public override void Fun1()
{
Console.WriteLine("B的第一个儿子");
}
//隐藏基类中的虚方法Fun2
public void Fun2()
{
Console.WriteLine("B的第二个儿子");
}
//通过new重写基类中的虚方法Fun3,只在实例化本类B时覆盖父类方法Fun3
new public void Fun3()
{
Console.WriteLine("B的第三个儿子");
}
//子类中没有对父类的虚方法Fun4做任何处理
//Fun4
//编译通不过,因为A.Fun5未被标记为:virtual,abstract,overrde.无法进行重写.
//public override void Fun5()
//{
// Console.WriteLine("B的第五个儿子");
//}
//隐藏基类中的Fun6
public void Fun6()
{
Console.WriteLine("B的第六个儿子");
}
//通过new重写基类中Fun7
new public void Fun7()
{
Console.WriteLine("B的第七个儿子");
}
//子类中没有对父类的方法Fun8做任何处理
//Fun8
}
{
//通过override重写基类中的虚方法Fun1
public override void Fun1()
{
Console.WriteLine("B的第一个儿子");
}
//隐藏基类中的虚方法Fun2
public void Fun2()
{
Console.WriteLine("B的第二个儿子");
}
//通过new重写基类中的虚方法Fun3,只在实例化本类B时覆盖父类方法Fun3
new public void Fun3()
{
Console.WriteLine("B的第三个儿子");
}
//子类中没有对父类的虚方法Fun4做任何处理
//Fun4
//编译通不过,因为A.Fun5未被标记为:virtual,abstract,overrde.无法进行重写.
//public override void Fun5()
//{
// Console.WriteLine("B的第五个儿子");
//}
//隐藏基类中的Fun6
public void Fun6()
{
Console.WriteLine("B的第六个儿子");
}
//通过new重写基类中Fun7
new public void Fun7()
{
Console.WriteLine("B的第七个儿子");
}
//子类中没有对父类的方法Fun8做任何处理
//Fun8
}
以下是对类A和类B的操作:
public class P
{
static void Main(string[] args)
{
A A1 = new B();
Console.WriteLine("A1:");
A1.Fun1();
A1.Fun2();
A1.Fun3();
A1.Fun4();
A1.Fun5();
A1.Fun6();
A1.Fun7();
A1.Fun8();
B B1 = new B();
A A2 = B1;
//上面的两句:B B1 = new B();和A A2 = B1;相当于 A A1 = new B();
Console.WriteLine("B1:");
B1.Fun1();
B1.Fun2();
B1.Fun3();
B1.Fun4();
B1.Fun5();
B1.Fun6();
B1.Fun7();
B1.Fun8();
Console.WriteLine("A2:");
A2.Fun1();
A2.Fun2();
A2.Fun3();
A2.Fun4();
A2.Fun5();
A2.Fun6();
A2.Fun7();
A2.Fun8();
Console.ReadLine();
}
}
结果:{
static void Main(string[] args)
{
A A1 = new B();
Console.WriteLine("A1:");
A1.Fun1();
A1.Fun2();
A1.Fun3();
A1.Fun4();
A1.Fun5();
A1.Fun6();
A1.Fun7();
A1.Fun8();
B B1 = new B();
A A2 = B1;
//上面的两句:B B1 = new B();和A A2 = B1;相当于 A A1 = new B();
Console.WriteLine("B1:");
B1.Fun1();
B1.Fun2();
B1.Fun3();
B1.Fun4();
B1.Fun5();
B1.Fun6();
B1.Fun7();
B1.Fun8();
Console.WriteLine("A2:");
A2.Fun1();
A2.Fun2();
A2.Fun3();
A2.Fun4();
A2.Fun5();
A2.Fun6();
A2.Fun7();
A2.Fun8();
Console.ReadLine();
}
}
说明:
这里涉及到重写的方式(先不涉及抽象的概念):
virtual-override方式:
基类中被标识为virtual的方法其引用地址是程序在运行时才确定的,当父类访问子类时,如果子类中以override的方式重写了父类中的虚方法,这时虚方法的实际地址便指向被override覆盖的方法.如:A1.Fun1();
-new方式:重写基类中的方法(包括虚方法),只有当本类被实例化时才会覆盖父类的方法;
- C#中的继承(一)
- C#中的继承(一)
- C#中的继承(二)
- C++中的继承(一)
- C++中的继承(一)
- c# 继承(一)
- C#中的继承
- C#中的继承应用
- C#中的继承
- C#中的继承
- C#中的继承
- C#中的接口继承
- C#中的继承
- C#中的继承
- C#中的继承
- C#中的继承举例
- C#中的继承
- C#中的继承规则
- CLR基础---CLR的执行模式(二)
- CLR基础---CLR的执行模式(一)
- Asp.Net引用JS文件出现乱码
- 发布两个分页存储过程
- 关于托管服务器【转】
- C#中的继承(一)
- eclipse调试环境下的Excel导出路径
- SQLServer 端口
- Limit.exe
- 从权威网站上“偷”窃
- 寻找asp.net2.0空间~~
- 超棒的Ext!
- 看了SUMTEC的稍微思考了一下…… 感触颇深。讲一件身边的事:
- 都是�(65533)惹得祸~