第7章继承和接口设计一.选择题1.在C#中,一个类【】。
A) 可以继承多个类B) 可以实现多个接口C) 在一个程序中只能有一个子类D) 只能实现一个接口2.【】关键字用于在C#中从派生类中访问基类的成员。
A) new B) super C) this D) base 3.在定义类时,若希望类的某个方法能够在派生类中进一步改进,以满足派生类的不同需要,则应将该方法声明为【】。
A) new B) public C) virtual D) override4.在C#中,在派生类中对基类的虚方法进行重写,要求在派生类的声明中使用【】。
A) new B) public C) virtual D) override5.已知类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) 多态可以分为编译时多态和运行时多态。
前者的特点是在编译时就能确定要调用成员方法的哪个版本,后者则是在程序运行时才能确定要调用成员方法的哪个版本。
C) 编译时多态是在程序运行时才能确定要调用成员方法的哪个版本,而运行时多态在编译时就能确定要调用成员方法的哪个版本。
D) 多态和重载是两个完全不同的概念,前者是通过定义虚方法和重写虚方法来实现,后者是通过对同一函数名编写多个不同的实现代码来实现。
8.下列关于接口的说法,正确的是【】。
A) 接口中定义的方法都必须是虚方法B) 接口中定义的方法可以编写其实现代码C) 继承接口的类可提供被继承接口中部分成员的实现代码D) 接口中的所有方法都必须在其派生类中得到实现。
9.下列关于虚方法的描述中,正确的是【】。
A) 虚方法能在程序执行时动态确定要调用的方法,因此比非虚方法更灵活B) 在定义虚方法时,基类和派生类的方法定义语句中都要带上virtual修饰符C) 在重写基类的虚方法时,为消除隐藏基类成员的警告,需要带上new修饰符D) 在重写基类的虚方法时,需要同时带上virtual和override修饰符10.在C#中,以下关于抽象类的叙述中错误的是【】。
A) 抽象类可以包含抽象方法B) 含有抽象方法的类一定是抽象类C) 抽象类不能被实例化D) 抽象类可以是密封类11.在C#中,以下关于抽象类和接口的叙述中正确的是【】。
A) 抽象类可以包含非抽象方法,而接口不包含任何方法的实现B) 抽象类可以被实例化,而接口不能被实例化C) 抽象类不能被实例化,而接口可以被实例化D) 抽象类能够被继承,而接口不能被继承12.在C#中,以下关于抽象类和接口的叙述中正确的是【】。
A) 在抽象类中,所有的方法都是抽象方法B) 继承自抽象类的子类必须实现其父类(抽象类)中的所有抽象方法C) 在接口的定义中可以有方法实现,在抽象类的定义中不能有方法实现D) 一个类可以从多个接口继承,也可以从多个抽象类继承13.以下类和接口的区别中正确的是【】。
A) 类可以继承而接口不可以B) 类不可以继承而接口可以C) 类可以多继承而接口不可以D) 类不可以多继承而接口可以14.下列方法定义中,【】是抽象方法。
A) static void func(){ } B) virtual void func(){ }C) abstract void func(){ } D) overridel void func(){ } 15.下列关于接口的说法,错误的是【】。
A) 一个类可以有多个基类和多个基接口B) 抽象类和接口都不能被实例化C) 抽象类自身可以定义成员,而接口不可以D) 类不可以多重继承,而接口可以。
16.已知类Base、Derived的定义如下:class Base{ public void Hello(){ in Base!”); }}class Derived: Base{ public new void Hello(){ i n Derived!”); }}则下列语句段在控制台中的输出结果是【】。
Derived x=new Derived();();A) Hello in Base! B) Hello in Base! Hello in Derived!C) Hello in Derived! D) Hello in Derived!Hello in Base!17.关于继承,下列说法正确的是【】。
A) 子类将继承父类所有的成员B) 子类将继承父类的非私有成员C) 子类只继承父类public成员D) 子类只继承父类的方法,而不继承属性18.下列是抽象类的声明的是【】。
A) abstract class figure{ } B) c lass abstract figure{ }C) seald class figure{ } D) static class figure{}19.abstract修饰的方法是抽象方法,抽象方法只有声明而无主体,且【】。
A) 只能存在于抽象类中B) 可以在任何类中C) 只能在接口中D) 只能在密封类中20.重写一个基类的虚方法时,应与原虚方法的方法名相同,并且【】。
A) 不能改变方法的参数类型、个数和返回值B) 可以改变方法的参数类型、个数和返回值C) 可以改变方法的返回值D) 可以改变方法的参数类型和个数21.下面有关继承的说法中,正确的是【】。
A) A类和B类均有C类需要的成员,因此可以从A类和B类共同派生出C类B) 在派生新类时,可以指明是公有派生、私有派生或保护派生C) 派生类可以继承基类中的成员,同时也继承基类的父类中的成员D) 在派生类中,不能添加新的成员,只能继承基类的成员22.为了防止从所修饰的类派生出其他类,可以将此类定义为【】。
A) 抽象类B) 密封类C) 静态类D) 私有类23.若想从派生类中访问基类的成员,可以使用【】。
A) this关键字B) me关键字C) base关键字D) override关键字24.下面有关派生类的描述中,不正确的是【】。
A) 派生类可以继承基类的构造函数B) 派生类可以隐藏和重载基类的成员C) 派生类不能访问基类的私有成员D) 派生类只能有一个直接基类25.C#中的多态不能通过【】实现。
A) 接口B) 抽象类C) 密封类D) 虚方法26.下列程序错误的原因是【】。
sealed class SealedClass{ }class Derived:SealedClass{ }A) SealedClass类不能被继承B) 没有Main()入口C) SealedClass没有被实例化D) 以上皆是27.下面关于接口的叙述中,不正确的是【】。
A) 接口只是由方法、属性、索引器或事件组成的框架,并没有描述任何对象的实例代码B) 接口的所有成员都被自动定义为公有的,不可使用访问修饰符来定义接口成员C) 类可以通过在类型定义语句中包括冒号和接口名来表明它正在实现接口D) 一个类只能实现一个接口28.接口可以包含一个或多个成员,以下选项中【】不能包含在接口中。
A) 方法B) 属性C) 事件D) 常量29.下列叙述中,正确的是【】。
A) 接口中可以有虚方法B) 一个类可以实现多个接口C) 接口能被实例化D) 接口中可以包含已实现的方法30. 关于虚方法实现多态,下列说法错误的是【】。
A) 定义虚方法使用关键字virtual B) 关键字virtual可以与override一起使用C) 虚方法是实现多态的一种应用形式D) 派生类是实现多态的一种应用形式31. 以下类MyClass的定义中,【】是合法的抽象类。
A) abstract class MyClass { public abstract int getCount(); }B) abstract class MyClass { public virtual abstract intgetCount(); }C) abstract class MyClass { private abstract int getCount(); }D) abstract class MyClass { public static abstract intgetCount(); }32. 分析下列程序中类MyClass的定义class BaseClass{ public int i; }class MyClass:BaseClass{ public new int i; }则下列语句在Console 上的输出为【】。
MyClass y = new MyClass();BaseClass x = y;= 100;("{0}, {1}",,;A) 0, 0 B) 100, 100 C) 0, 100 D) 100, 033. 在C#程序中定义如下IPlay接口,实现此接口代码正确的是【】。
interface IPlay{ void Play();void Show();}A) class Teacher :Iplay{ void Play(){ 以下泛型集合声明中正确的是【】。
A) List<int> f=new List<int>(); B) List<int> f=new List ();C) List f=new List (); D) List<int> f=new List<int>;34. 以下关于泛型的叙述中错误的是【】。
A) 泛型是通过参数化类型来实现在同一份代码上操作多种数据类型B) 泛型编程是一种编程范式,其特点是参数化类型,C) 泛型类型和普通类型的区别在于泛型类型与一组类型参数或类型变量关联D) 以上都不对二.填空题1.在C#中有两种多态性:编译时的多态性和运行时的多态性。
编译时的多态性是通过【虚方法和重写虚方法】实现的,运行时的多态性是通过继承和【重载/隐藏】来实现的。
2.在声明类时,在类名前使用【abstract】修饰符,则声明的类只能作为其他类的基类,不能被实例化。
3.在声明类时,在类名前使用【sealed 】修饰符,则声明的类不能作为其他类的基类,不能再派生新的类。