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中,父类引用指向子类对象的能力称为运行时多态。 7. **访问控制和封装**: - 封装是面向对象编程的重要原则,它将类的实现细节隐藏...
C++中的继承是面向对象编程的核心特性之一,它允许创建一个新的类(派生类),该类继承自已存在的类(基类),并可以扩展或修改基类的功能。本题涉及了派生类和继承的多种概念,包括派生方式、成员访问、构造函数和...
在JavaScript中,类和继承是面向对象编程的重要概念。JavaScript是一种动态类型的语言,它没有像Java或C++那样的传统类,而是使用函数作为构造器来模拟类的行为,并通过原型链实现继承。本文将深入探讨JavaScript中...
`Student` 类继承自 `UniversityObject`,并实现了 `getSummary()` 函数。该函数返回学生的注册号和姓名组成的字符串。构造函数接受两个字符串参数,分别用于初始化 `name` 和 `register_str` 成员变量。通过这种...
实验五:派生类和继承(二).doc
收集的一些Java编程实例集:类和继承,含有丰富的中文注释,内容大致是:定义 Point类、定义形状接口、循环输出下转形状并打英创建自己异常、使用继承 (实例一个父类定义到子类)子类赋值把一个点定义创建圆对象定义...
Python类和继承的完全代码实现、详细讲解
继承是OOP中的一个重要特性,它允许一个类(子类或派生类)从另一个类(父类或基类)继承属性和行为。这种机制使得代码重用变得更加简单,同时也支持多态性——即不同类型的对象能够对同一消息作出不同的响应。在...
本篇文章将深入探讨如何在C#中使用和继承泛型类。 首先,让我们理解什么是泛型类。泛型类是一种模板或蓝图,它定义了参数化类型,这些类型在类实例化时可以被具体的类型替换。在C#中,我们使用尖括号`<>`来声明泛型...
在Qt5框架中,类的继承关系是构成整个框架的基础,而理解这些类之间的继承关系对于掌握和利用Qt5进行高效编程至关重要。 从提供的【部分内容】来看,包含了一系列的Qt5类和模块,涵盖图形用户界面(GUI)、网络通信、...
在这个示例中,我们探讨的是如何使用C++的类继承机制来计算球体、圆柱体和圆锥体的表面积和体积。C++是一个强大的编程语言,特别适合进行面向对象的编程,而VC++6.0是微软的老版开发环境,尽管已过时,但仍然是学习...
这里 `Student` 类继承了 `Person` 类,添加了一个新的属性 `grade` 并重写了 `sayHello` 方法。当我们创建一个 `Student` 对象时,它不仅具有 `Person` 的所有属性和方法,还增加了自己的特性。 最后,我们谈谈...
这里,`cBB` 类继承自 `cCC` 和 `cAA` 类。可以看到,`cBB` 类可以直接访问 `cCC` 类中的 `Method2` 方法,也可以访问 `cAA` 类中的属性 `m_a`。 #### Python 中的继承 继承是指一个类(子类)继承另一个类(父类...
最后一个示例展示了更复杂的继承结构,包括多级继承和抽象类的概念。定义了一个抽象基类`vehicle`,包含了`wheels`和`weight`两个属性。`car`和`truck`类分别继承自`vehicle`类,并添加了各自特定的属性,如`car`的`...
本实验的目的是为了掌握C++语言中派生类和继承的使用,包括派生类的声明方法、派生类构造函数的定义方法、基类成员在派生类中的访问属性、继承方式下构造函数和析构函数的执行顺序及构造规则、虚基类在解决二义性...
"kotlin基础教程之类和继承" 类和继承是面向对象编程的两个基本概念。在 Kotlin 编程语言中,类和继承的实现方式与 Java 相似,但也存在一些不同之处。 类声明 在 Kotlin 中,类声明使用 `class` 关键字,后跟...
在C++编程语言中,派生类和继承是面向对象编程的重要概念,它们允许我们创建新的类,这些类可以从已有的类(称为基类或父类)中派生,并继承其属性和行为。这个实验报告涉及到对这些概念的实践理解和应用。 首先,...
总的来说,"Qt5类继承关系图"是学习和开发Qt5应用的重要资源,它帮助开发者理解Qt5类库的组织结构,提高代码的编写效率,同时也有助于调试和优化项目。通过深入研究这个图,开发者可以更加熟练地运用Qt5的类和方法,...
在该图表中,开发者可以找到如QPushButton、QLabel、QLineEdit等具体控件的层级关系,以及如何通过继承和组合这些控件来构建复杂的用户界面。 通过分析这两个文件,我们可以了解到Qt的类体系是如何组织的,哪些类是...