继承和接口设计习题_第1页
继承和接口设计习题_第2页
继承和接口设计习题_第3页
继承和接口设计习题_第4页
继承和接口设计习题_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章继承和接口设计 一.选择题 1. 在c#中,-个类【 人 A)可以继承多个类B)可以实现多个接口 C)在个程序中只能有个了类D)只能实现个接口 2. 【关键字用于在C护P从派生类中访问基类的成员。 A)new B) super C) this D) base 3. 在定义类时,若希望类的某个方法能够在派生类中进-步改进,以满足派生类的不同需要, 则应将该方法声明为【】。 A)newB) publicC) virtualD) override 4. 在C#中,在派生类中对基类的煖方法进行重写,要求在派生类的声明中使用【 Jo A)newB) publicC) virtualD) overr

2、ide 5. 已知类B是由类A继承而来,类A中有个名为M的非虚方法,现在希望在类B中也定义 个名为M的方法,且两方法的参数个数和类型完全相同,若希望编译时不出现警告信息,则 在类B中声明该方法时,应使用【】关键字。 A)static B) new C) override D) virtual 6. 假设类B继承了类A,下列说法错谋的是【= A)类B中的成员可以访问类A中的公有成员 B)类B中的成员可以访问类A中的保护成员 C)类B中的成员可以访问类A中的私有成员 D)类B中的成员可以访问类A中的静态成员 7. 关于多态,下列说法正确的是【 A)多态实际上就是重载,它们本质上是以一样的 B)务态

3、可以分为编译时多态和运行时多态。前者的特点是在编译时就能确定妥调用成员方法的 哪个版本,后者则是在程丿了:运行时才能确定要调用成员方法的哪个版本。 C)编译时多态是在程疗:运行时才能确定要调用成员方法的哪个版本,而运行时多态在编译时就 能确定要调用成员方法的哪个版本。 D)多态和重载是两个完全不同的槪念,前者是通过定义虚方法和重写虚方法来实现,后者是通 过对同-函数名编写多个不同的实现代码来实现。 8. 下列关于接口的说法,正确的是【】。 A)接口中定义的方法都必须是虚方法 B)接口中定义的方法可以编写其实现代码 C)继承接口的类可捉供彼继承接口中部分成员的实现代码 D)接口中的所有方法都必须

4、在其派生类中得到实现 9. 下列关于虚方法的描述中,正确的是【】。 A)虚方法能在程序执行时动态确定耍调用的方法,因此比非虚方法更灵活 B)在定义虚方法时,基类和派生类的方法定义语句中都要带上virtual修饰符 C)在重写基类的虚方法时,为消除隐诫基类成员的警告,需要带上ne”修饰符 D)在重写基类的虚方法时,需要同时带上virtual和override修饰符 10. 在C#中,以下关于抽象类的叙述中错误的是【 A)抽象类可以包含抽象方法B)含有抽象方法的类定是抽象类 C)抽象类不能彼实例化 D)抽象类可以是密封类 I 中,以下关于抽象类和接口的叙述中正确的是【C#.在11. A)抽象类可以

5、包含非抽象方法,而接口不包含任何方法的实现 B)抽象类可以被实例化,而接口不能被实例化 C)抽象类不能彼实例化,而接口可以彼实例化 D)抽象类能够被继承,而接口不能被继承 12在C#中,以下关于抽象类和接口的叙述中正确的是【. A)在抽象类中.所有的方法都是抽彖方法 B)继承自抽象类的了类必须实现其父类(抽象类)中的所有抽象方法 C)在接口的定义中可以有方法实现,在抽象类的定义中不能有方法实现 D)-个类可以从多个接口继承,也可以从多个抽象类继承 13以下类和接口的区别中正确的是【 Jo A)类可以继承而接口不可以B)类不可以继承而接口可以 C)类可以多继承而接口不可以D)类不可以飲继承而接I

6、川J以 14下列方法定义中,【是抽象方法。 A) static void func() B) virtual void func() C) abstract void func() 15. 下列关于接口的说法, D) overridel void func() 错谋的是【 Ja A)个类可以冇多个丛类和篡个展接口B)抽象类和接口都不能被实例化 C)抽象类自身可以定义成员,而接口不可以D)类不可以多重继承,而接口可以。 16. 已知类Base、Derived的定义如下: class Base public void Hello() in Base! ); class Derived: Base

7、public new void Hello() in Derived! ); 则下列语句段在控制台中的输出结果是【】。 Derived x二new Derived(); 0; A) Hello in Base! B) Hello in Base! Hello in Derived! C) Hello in Derived!D) Hello in Derived!Hello in Base! 17关于继承,下列说法正确的是【 lo A) /类将继承父类所有的成员 C)(类只继承父类public成员 18.下列是抽象类的声明的是【 A) abstract class figuref B)了类将继承

8、父类的非私有成员 D)f类只继承父类的方法,而不继承属性 Jo B)class abstract figure C)seald class figure D) static class figure 19. abstract修饰的方法是抽象方法,抽象方法只有声明而无主体,且【 Y A)只能存在于抽象类中 B)可以在任何类中 C)只能在接口中 D)只能在密封类中 人 .重写个基类的虚方法时,应与原虚方法的方法名相同,并且【20. A)不能改变方法的参数类型、个数和返回值 B)可以改变方法的参数类型、个数和返回值 C)可以改变方法的返回值 D)可以改变方法的参数类型和个数 21. 下面有关继承的说

9、法中,正确的是【. A) A类和B类均有C类需要的成员,因此可以从A类和B类共同派生出C类 B)在派生新类时,可以指明是公有派生、私有派生或保护派生 C)派生类可以继承基类中的成员,同时也继承基类的父类中的成员 D)在派生类中,不能添加新的成员,只能继承基类的成员 22. 为了防止从所修饰的类派生出其他类,可以将此类定义为【】。 A)抽象类 B)密封类 C)静态类 D)私有类 23. 若想从派生类中访问基类的成员,可以使用【1 A) this关键字 B) me关键字 C) base关键字 D) override关键字 24. 下面有关派生类的描述中,不正确的是【 儿 A)派生类可以继承臺类的构

10、造函数B)派生类可以隐藏和重载基类的成员 C)派生类不能访问基类的私有成员D)派生类只能有个直接基类 25. C#中的多态不能通过【】实现。 A)接口 B)抽象类 C)密封类 D)虚方法 26. 下列程序错误的原因是【 儿 sealed class SealedClass class Derived:SealedClass B)没有Main()入口 D)以上皆是 A) SealedClass类不能被继承 C) SealedClass没有彼实例化 27. 下面关于接口的叙述中,不正确的是【】。 A)接口只是由方法、属性、索引器或事件组成的框架,并没有描述任何对象的实例代码 B)接口的所有成员都被

11、白动定义为公有的,不可使用访问修饰符来定义接口成员 C)类可以通过在类型定义语句中包扌舌冒号和接口名来衣明它正在实现接口 D)一 个类只能实现一个接口 28. 接口可以包含个或多个成员,以下选项中【】不能包含在接口中。 A)方法B)属性 C)事件 D)常量 29. 下列叙述中,正确的是【】。 A)接口中可以有虚方法B) 个类可以实现多个接口 C)接口能被实例化 D)接口中可以包含已实现的方法 30. 关于虚方法实现多态,下列说法错误的是【 Jo A)定义虚方法使用关键字virtualB)关键字virtual可以j override 起使用 C)虚方法是实现多态的种应用形式 D)派生类是实现多态

12、的种应用形式 31. 以下类MyClass的定义中,【】是合法的抽象类。 getCount(); int abstract public MyClass class A) abstract B)abstractclassMyClass publicvirtualabstract int getCount(); C)abstractclassMyClass privateabstract int getCount(); D) abstract class MyClass public static abstract int getCount(); 32. 分析下列程序中类MyClass的定义 c

13、lass BaseClass public int i; class MyClass:BaseClass public new int i; 则下列语句在Console上的输出为【】。 MyClass y = new MyClass(); BaseClass x = y; =100; (0,; A) 0, 0 B) 100, 100 C) 0, 100 D) 100, 0 33. 在C#程序中定义如下IPlay接口,实现此接口代码正确的是【 人 interface IPlay void Play(); void Show(); A) class Teacher :lplay void Play

14、)以下泛型集合声明中正确的是【】。 A) List f=new List();B) List f=new List (); C) List f=new List ();D) List f=new Ust; 34. 以下关于泛型的叙述中错误的是【 e A) 泛型是通过参数化类型来实现在同份代码上操作多种数据类型 B) 泛型编程是种编程范式,其特点是参数化类型, C) 泛型类型和普通类型的区别在于泛型类型与-组类型参数或类型变量关联 以上都不对D) 二.填空题虚中有两种多态性:编译时的多态性和运行时的参态性。编译时的多态性是通过【.在 C#1 来实现的。】实现的,运行时的多态性是通过继承和【卓找/

15、隐藏方法和重方法 】修饰符,则声明的类只能作为其他类的基类,不.在声明类时,在类名前使用【abstract?能 被实例化。】修饰符,则声明的类不能作为其他类的基类,sealed .在声明类时,在类名前 使用【3不能再派生新的类。构造函数是先基类的先构造,析构函数(:L考察类的继承4.下列 程序的运行结果是【AB 是子类先析构)class A public A() (A); class B:A public B()(B); class Program public static void Main() B b = new B(); 0; 5. 分析下列程序的运行结果是【】。考察类的继承中base

16、的使用 class A public int x=100; class B:A new public int x; public B(int y, int z) x=y; =z; public int getxl() return ; public int getx2() return x; class Program public static void Main() B b = new B(3Z 6); int n 二(); int m =(); (m=0,n=“ m, n); m=3.n=6 6. 分析下列程序的运行结果是【o考察类的继承(隐藏和重1 abstract class Bas

17、eClass public void MethodA() (); public virtual void MethodB() (); class Classi: BaseClass new public void MethodA() (); public override void MethodB() (); class Class2 : Classi new public void MethodB() (); class MainClass public static void Main(string args) Class2 a = new Class2(); ();0; 0; 7. 下列

18、程序的运行结果是AA CC DD class A public void Fl() (AA ); public virtual void F2() (BB ); DD L考察类的继承(隐藏和重写) class B : A new public void Fl() (CC ); public override void F2() (DD ); class Test static void Main() B b = new B(); A a = b; ();();0; 0; (); 考察类的继承 8阅读下列程序,程序的输出结果是【 o public class A private int spee

19、d =10; public int Speed get return speed; set speed = value;龙禁止驶入!); public class B:A public B() if=20) 龙机动车); else龙非机动车); class Program public static void Main() B b=new B(); = 30; 非机动车禁止驶入! 考察类的继承 9.阅读下列程序,程序的输出结果是【 Jo public class Person private int age = 0; public int Age get return age; set 晩填污

20、敵?龙成年人); 浅敖?未成年人); age = value; public class People : Pers on public People(int age) Age = age; 龙不得入内); class Program public static void Main() People b = new People (25); 淄稠浓?圮械整榜蔽龙你的年龄是: 0; 成年人不得入内 你的年龄是:25 10.阅读下列程序,程序的输出结果是【 interface IA void Hello(); class Base:IA public void Hello() (Hello in

21、Base!); class Derived:Base new public void Hello() (Hello in Derived!); class Program public static void Main() Base b=new Base(); Derived d二new Derived (); IA x; 0; 0; X 二 b;(); x 二 d;(); (); Hello in Base!. Hello in Derived! Hello in Base! Hello in Base! 人考察接口的映射 11 阅读下列程序,程序的输出结果是【 interface IA v

22、oid Hello(); class Base:IA public void Hello() (Hello in Base!); class DerivedJA new public void Hello() (Hello in Derived!); class Program public static void Main() Base b=new Base(); Derived d二new Derived (); IA x; x=b;(); x=d;(); 0; Hello in Base! Hello in Derived! 12.阅读下列程序,程序的输出结果是【.考察接口的映射 int

23、erface laMain阅读下列程序,程序的输出结果是【】。考察类的实现与泛 型 class StackMain编写个控制台应用程序项目,实现学生和教师数据输入和显示功 能。学生类Student有编号、姓名、班号和成绩等字段,教师类有编号、姓名、职称和部门等字 段。要求将编号、姓名输入和显示设计成个类Person,并作为Student和Teacher的基类。需 用相关数据进行测试。 public class PersonMain设计个控制台应用程序项目b,设计个普通职工类 Employee,其工资为基本工资(1000)加上工龄工资(每年增加30元)。从Employee类派生出 个本科生类UE

24、mployee.其丄资为普通职匸算法的倍。并用相关数据进行测试,测试效果图如 下图所示。. b的执行结果控制台应用程疗:项目MainCalqrt (sum ); public class Employee class Program static void Main(string args) double a, b, c,sum; a =(); b = 0); c = 0); Cal cc = new Cal(a,b,c); sum=(abc); (sum=Oz sum); 5.编写个通用的人员类(Person),该类具有姓名(Name)、年龄(Age)、性别(Sex)等字 段。然后通过对Pe

25、rson类的继承得到个学生类(Student)o学生类能够存放学生5门课的成绩, 具有重载构造函数用于对学生的信息进行賦值(构造函数进行重载,至少给出三种形式),并有 求平均成绩的方法和显示学生信息的方法,最后编程对Student类的功能进行验证。 public class Person public string Name; public int Age; public char Sex; public class Student: Person public doublet Score; public double Aver; public Student(string xm, int n

26、l, char xb) Name = xm; Age = nl; Sex = xb; Score = new doublets; public Student() 慎做?勘王平;Age = 18; Sex = 女; Score = new double5; public Student(string xm, int nl, char xb, doubleJ cj) Name = xm;Age = nl; Sex = xb; Score = new double5); Scorei = cji; sum = sum + Scorefi; for (int i = 0; i 5; i+) publ

27、ic double CalAverf) double sum = 0; for (int i = 0; i 5; i+) Aver = sum / 5; return (Aver); public void display() Oh Name);姓名:龙 龙年龄:0, Age); 龙性别:Oh Sex); 龙成绩:); for (int i = 0; i 5; i+)(0 z Scorei); ( 平均成绩:(Ob CalAver(l); class Program public static void Main() doublet cj = 87, 78, 90, 67, 89 ; Stud

28、ent stu; stu = new Student(); (); 蹉?蔽?珠据涣?张三,20别;(); 蹉?鼓?球撼決?张三,20,,男川);0; (); 6设计个控制台应用程序定义如下接口 la: interface la声明接口 la float getarea(); 求面积 从它派生Rectangle (长方形类)和Square (正方形)两个类,包含getarea方法的实现。并分别 输出长2宽3的长方形和长5的正方形的面积。 interface la声明接口 la float getarea();接 口成员声明 public class Rectangle : la 类 Rectan

29、gle 继*接口 la float xf y; public Rectangle(float xl, float yl) 构造函数 x = xl; y = yl; float()显式接口成员实现,带有接口名前缀,不能使用public return x 拿 y; public class Square : la 类 Square 继承接口 la float x; public Square(float xl) 构造函数 x = xl; float()显式接口成员实现,带有接口名前缀,不能使用public return x * x; class Program static void Main(s

30、tring args) Rectangle boxl = new Rectangle(2.0t 3.Of);定义个 类实例 la ia = (la)boxl;定义个 接口实例 长方形面 积:0, ();龙 定义Square box2 = new Square(5.0f); 个类实例定义个la ib = (Ia)box2; 接口实例:0,();龙正方形面积 7.设计个控制台应用程丿了:,含个学生类Stud (每个学生有学号xh.姓名xm和分数fs私有 字段),向ArrayList对象中添加若干个学生对象,并按分数从高到低输出所有学生信息。要求比 较采用继承Icomparer接口的方式实现。 cl

31、ass Program class Stud xh = no; xm = n ame; fs = degree; public void disp() (0tlt2L xh, xmz fs); public class myCompareClassfs : IComparer int (object xz object y) Stud b = (Stud)y; Stud a = (Stud)x; if return 1; else if = return 0; else return -1; static void disparr(ArrayList myarc string str) (str); (学号t姓名t分数); foreach (Stud s in myarr) (); static void Main(string( args) int i, n = 4; IComparer myComparerfs = new myCompareClassfs(); ArrayList myarr = new ArrayList(); Stud st = new Stud4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论