{
Console.WriteLine(\ }
public override void MethodB() { } }
class Class2 : Class1 {
new public void MethodB() { } }
public static void Main(string[] args) {
Class2 o = new Class2(); o.MethodA(); }
答案:Class1
14、 下列代码运行结果(难易度:较难;知识点:继承)(10分) public class Student{
public virtual void Exam(){
Console.WriteLine(\学生都要考试\ }
}
public class Undergraduate:Student{ public new void Exam(){ base.Exam();
Console.WriteLine(\大学生有选择考试科目的权利\ }
}
static void Main() {
Student stu = new Undergraduate(); stu.Exam();
答案:学生都要考试
15、 (难易度:较难;知识点:继承)(15分)输入两个正整数,分别作为直角三角
形的两个直角边,求出斜边的长度。 提示:勾股定理 c2=a2+b2 Math.Exp
Math.Sqrt
要求继承前面的四则运算类,可以调用其中的求和的方法;在继承类中加写方法完成斜边的计算
16、 (难易度:较难;知识点:继承)(15分)设计一个人类Person,有一个虚方法
GetPerson(),输出“这是基类Person”,然后设计子类:学生类Student,并重写基类的虚方法,输出“这是学生类”;教师类Teacher,并重写基类的虚方法,输出“这是教师类”;医生类Doctor,并重写基类的虚方法,输出“这是医生类”。分别建立每个类的对象,分别输出各对象的信息。 17、 (难易度:较难;知识点:继承)(15分)计算机正方体和长方体的体积:创建
一个含有abstract的求体积的vol()方法抽象基类shape;派生一个子类正方体Cube,实现父类抽象方法vol();创建子类Cube的对象,然后调用它的vol()方法;派生一个子类长方体Rectangle,实现父类抽象方法vol();创建子类Rectangle的对象,然后调用它的vol()方法;创建一个应用程序测试系统。 18、 (难易度:较难;知识点:继承)(15分)定义一个体育活动类(Sports)作为基
类,它有一个进行活动的方法play(),足球(Football)和篮球(Bascketball)都是体育活动类的衍生类。请在测试类(Test)中编写一个方法howToPlay(Sports sp),该方法要求传递一个Sports类型的参数。该方法的作用是:
1) 当传入的实例类型为Football时,控制台上应打印:足球是用脚踢的! 2) 当传入的实例类型为Bascketball时,控制台上应打印:篮球是用手打的! 在程序中调用howToPlay()验证代码。 19、 建立一个类和它的继承类,完成票价计算
基类:汽车
属性:距离、每公里的价格 方法:计算票价1
构造函数:初始化距离、每公里的价格
子类:豪华汽车 属性:空调附加费 方法:计算票价2
构造函数:空调附加费(注意构造函数的继承) (难易度:较难;知识点:继承)(15分) 20、 定义一个班级抽象类,有属性id、name,有一个抽象方法ShowInfo(),再定一个类
DriveClass继承myclass,在类中重写抽象类中的方法,输出id和name。调用这个方法。 (难易度:较难;知识点:继承)(15分)
21、 工资计算
教师:学历工资+岗位工资+职称工资+课时费 保卫:岗位工资+值班津贴 辅导员:学历工资+岗位工资
定义一个基类,3个继承类实现工资计算
(难易度:较难;知识点:继承)(15分)
22、 票价计算 ? 基类:普通汽车:
? 属性:距离、每公里的价格 ? 方法:计算票价
? 继承类:豪华汽车
? ? ? ? ?
属性:空调附加费 方法:计算票价
继承类:卧铺车
属性:每公里加的价格 方法:计算票价
? 分别使用重写的方法
(难易度:较难;知识点:继承)(15分)
23、 (难易度:较难;知识点:继承)(20分)简易学生信息管理(用抽象类实现多态) 编写一个应用程序,利用方法的重写和多态性进行学生信息的简单管理,输出类似如下格式的学生信息:(高职学生输出总成绩;成教学生输出总学分)。
王静:高职类2年级学生,总成绩:248 刘丽:成教类1年级学生,总学分:26
说明:(1) 定义一个抽象类Students,在其中添加6个属性,分别对应于学生类别、姓名、进校年数、基础课成绩、专业课成绩、实训课成绩; 1个方法,计算总成绩;1个抽象方法,用于显示学生信息。
(2) 定义1个派生类StudentA,继承自抽象类,用于实现“高职”类学生信息的处理,在其中实现基类的抽象方法。
(3) 定义1个派生类StudentB,继承自抽象类,用于实现“成教”类学生信息的处理,在其中实现基类的抽象方法,并添加计算总学分的方法。
(4) 总成绩 = 基础课+专业课+实训课 总学分 = 总成绩 / 10
总学分为整数 24、 接口与继承的区别?什么时候使用接口,什么时候使用继承? (难易度:较难;知识点:继承)(10分)
(1) 接口定义一个类型需要实现的方法,属性,索引和事件,包括可能的参数类型和返回值类型,而把具体的实现交由相应的类或结构来做,从而为组件提供多态能力。
(2) 继承常用于在一个现有父类的基础上的功能扩展,往往是我们将几个类中相同的成员提取出来放在父类中实现,然后在各自的子类中加以继承。 (3) 接口可以实现多接口继承,而继承只能实现单继承。
(4) 实现继承可继承父类型的实现,由于接口中没有定义方法的实现,因此必须实现继承后该接口的所有方法。 (5) 为父类型添加方法可能不影响使用继承自该类型实现的用户,而为接口添加方法导致用户必须为新方法添加实现。
(6) 当派生类和基类是is-a的关系是使用\继承\,典型案例\苹果 is-a 水果\,存在can-do的关系时使用\接口\
25、 什么是虚方法?什么是抽象方法?(难易度:较难;知识点:继承) (5分) 虚函数:没有实现的,可由子类继承并重写的函数。
抽象方法:在抽象类中定义的方法,没有方法体,规定其非虚子类必须实现的函数,必须被重写。
26、 请简要描述抽象类。(知识点:抽象类;难度:简单题) (10分)
用abstract修饰的类。抽象类可以包含实现的成员。未实现的成员隐含的是virtual属性,子类实现时必须用override关键字。
27、 重载与覆盖(重写)的区别?(难易度:较难;知识点:继承)(10分)
1、方法的重写是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系
2、重写只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
3、重写要求参数列表相同;重载要求参数列表不同。
4、重写关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调d用时的实参表与形参表来选择方法体的。 28、 写出下列程序的运行结果。(难易度:较难;知识点:继承)(15分) ///
/// 抽象基类 ///
public abstract class People {
public string name; public string sex;
public People(string out_name,string out_sex) {
name = out_name; sex = out_sex; } //
// 一个抽象方法,现在的人都上网,不同的人上网的目的是什么 // 基类的中抽象方法不用实现 //
public abstract void SearchInternet(); }
//======================================================== public class Student : People {
string StudentNum;
///
/// base(out_name,out_sex)同时去初始化抽象类中的两个数据成员 ///
public Student(string out_name, string out_sex, string out_stuNum) : base(out_name,out_sex) {
name = out_name; sex = out_sex;
StudentNum = out_stuNum;
}
public override void SearchInternet() {
Console.WriteLine(\这个人名叫\性别:\工号:\StudentNum + \他上网的目的是查找习题答案\\n\ } }
//=============================================================== public class Teacher : People {
string TeachNum;
public Teacher(string out_name, string out_sex, string out_Tnum) : base(out_name,out_sex) {
name = out_name; sex = out_sex;
TeachNum = out_Tnum; }
public override void SearchInternet() {
Console.WriteLine( \这个人名叫\性别:\工号:\TeachNum +\他上网的目的是发布习题答案\\n\ }
}
//========================================================= static void Main(string[] args) {
Student stu = new Student(\小明\男\ Teacher teacher = new Teacher(\男\ stu.SearchInternet(); teacher.SearchInternet(); Console.ReadLine();
}
答案:这个人名叫小明,性别:男,学号:120016101,他上网的目的是查找习题答案 这个人名叫Peter,性别:男,工号:20524,他上网的目的是发布习题答案 29、 虚函数的作用是什么? (难易度:简单;知识点:继承)(10分) (1)、使用虚函数是为了更好的定义类的方法。提供统一的方法定义。 (2)、就是可以在子类中被重写,当你继承一个类时,如果觉得父类中的虚函数不能满足你的要求,就可以在子类中重写这个函数了。 (3)、在派生类中重载时需要加上override关键字。
请解释virtual的含义?(难易度:较难;知识点:继承)
virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。 30、
阅读下面的代码,写出运行结果。(难易度:难;知识点:继承)(15分)