public class MyBaseClass //基类
{
public virtual void Print()
{
Console.WriteLine("This is a base class.");
}
}
有三个类,形成了一个继承的层次:MyBaseClass、MyDerivedClass、SecondDerived,所有这三个类都包括名称 为Print的方法。在MyBaseClass中,Print被标记为virtual,在MyDerivedClass被标记为override。
public class MyDerivedClass:MyBaseClass //派生类
{
public override void Print()
{
Console.WriteLine("This is a derived class");
}
}
如果把SecondDerived的Print方法声明为override,那么它会覆写方法的全部两个低继承级别的版本,即通过基类调用时,基类会调用派生类的override方法,一直向上继承直到不是override方法为止。
public class SecondDerived:MyDerivedClass //最派生类
{
public override void Print()
{
Console.WriteLine("This is a second derived class.");
}
}
public static void Main() //主类
{
SecondDerived derived = new SecondDerived();
MyBaseClass mybc = (MyBaseClass)derived;
derived.Print();
mybc.Print();
}
输出结果:This is a second derived class.
This is a second derived class.(MyBaseClass类调用MyDerivedClass,MyDerivedClass调用SecondDerived类中的方法,因为BaseClass的Print方法是virtual,MyDerivedClass、SecondDerived的Print方法是override,一直递归向派生类调用,直到派生类中的方法不是override为止。)
如果把SecondDerived的Print方法声明为new.
public class SecondDerived:MyDerivedClass //最派生类
{
public new void Print()
{
Console.WriteLine("This is a second derived class.");
}
}
public static void Main() //主类
{
SecondDerived derived = new SecondDerived();
MyBaseClass mybc = (MyBaseClass)derived;
derived.Print();
mybc.Print();
}
输出结果:This is a second derived class.
This is a derived class.(基类BaseClass调用派生类MyDerivedClass的Print方法,因为BaseClass的Print方法是virtual,MyDerivedClass的Print方法是override,而没有调用SecondDerived类中的方法,因为SecondDerived类中的方法是new.)
分享到:
相关推荐
Java 类和继承相关代码集 Java 类和继承相关代码集
实验五:派生类和继承(二).doc
收集的一些Java编程实例集:类和继承,含有丰富的中文注释,内容大致是:定义 Point类、定义形状接口、循环输出下转形状并打英创建自己异常、使用继承 (实例一个父类定义到子类)子类赋值把一个点定义创建圆对象定义...
Python类和继承的完全代码实现、详细讲解
全书分为6大部分,分别对C++的特点,类和继承,STL与泛型编程,库的设计等几大技术问题进行深入讨论
熟练掌握三种继承以及虚继承的概念知识,概念填空题 简答题 派生类如何实现对基类私有成员的访问?什么是类型兼容规则?派生类的构造函数是怎样的执行顺序,析构函数的执行顺序是如何实现的?什么是虚基类?它有什么...
一个student类,lectureTeatre类,继承抽象module类,通过继承来实现接口
类继承的方法,关于类的写法,类的继承方式.
我们已经在第一章中使用prototype属性模拟类和继承的实现。 prototype属性本质上还是一个JavaScript对象。 并且每个函数都有一个默认的prototype属性。 如果这个函数被用在创建自定义对象的场景中,我们称这个函数为...
NULL 博文链接:https://liujunhg.iteye.com/blog/1069419
类的继承以及构造函数,包括私有继承、公有继承的区别,详细的构造函数的使用
类与继承 类与继承 类与继承 类与继承 类与继承
主要介绍了python类和继承用法,实例分析了Python类的定义与继承的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
Java抽象类和接口和继承之间关系 Java抽象类和接口和继承之间关系
内容:1.Qt5类继承图 2.常用的类的更详细说明和图解 3.你能学到一些PyQt自我提升的方法
给定一个头文件Vec.h,其中有抽象类模板VECROR设计。还有插入运算符重载、抽取运算符重载的普通c++函数...1、将类模板VECTOR作为基类,通过公共继承派生一个新的类模板Vector(向量类)和一个新的自定义字符串了String。
c#使用 和 继承 泛型类
c++课件 派生类与继承
分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:①在两个基类中都包含一部分相同名字的数据成员name(姓名),age(年龄)和成员函数...