【正文】
第7章 繼承和接口設(shè)計(jì)一.選擇題1.在C中,一個(gè)類【 】。A) 可以繼承多個(gè)類 B) 可以實(shí)現(xiàn)多個(gè)接口C) 在一個(gè)程序中只能有一個(gè)子類 D) 只能實(shí)現(xiàn)一個(gè)接口2.【 】關(guān)鍵字用于在C中從派生類中訪問(wèn)基類的成員。A) new B) super C) this D) base3.在定義類時(shí),若希望類的某個(gè)方法能夠在派生類中進(jìn)一步改進(jìn),以滿足派生類的不同需要,則應(yīng)將該方法聲明為【 】。A) new B) public C) virtual D) override4.在C中,在派生類中對(duì)基類的虛方法進(jìn)行重寫,要求在派生類的聲明中使用【 】。A) new B) public C) virtual D) override5.已知類B是由類A繼承而來(lái),類A中有一個(gè)名為M的非虛方法,現(xiàn)在希望在類B中也定義一個(gè)名為M的方法,且兩方法的參數(shù)個(gè)數(shù)和類型完全相同,若希望編譯時(shí)不出現(xiàn)警告信息,則在類B中聲明該方法時(shí),應(yīng)使用【 】關(guān)鍵字。A) static B) new C) override D) virtual6.假設(shè)類B繼承了類A,下列說(shuō)法錯(cuò)誤的是【 】。A) 類B中的成員可以訪問(wèn)類A中的公有成員 B) 類B中的成員可以訪問(wèn)類A中的保護(hù)成員C) 類B中的成員可以訪問(wèn)類A中的私有成員 D) 類B中的成員可以訪問(wèn)類A中的靜態(tài)成員7.關(guān)于多態(tài),下列說(shuō)法正確的是【 】。A) 多態(tài)實(shí)際上就是重載,它們本質(zhì)上是以一樣的B) 多態(tài)可以分為編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。前者的特點(diǎn)是在編譯時(shí)就能確定要調(diào)用成員方法的哪個(gè)版本,后者則是在程序運(yùn)行時(shí)才能確定要調(diào)用成員方法的哪個(gè)版本。C) 編譯時(shí)多態(tài)是在程序運(yùn)行時(shí)才能確定要調(diào)用成員方法的哪個(gè)版本,而運(yùn)行時(shí)多態(tài)在編譯時(shí)就能確定要調(diào)用成員方法的哪個(gè)版本。D) 多態(tài)和重載是兩個(gè)完全不同的概念,前者是通過(guò)定義虛方法和重寫虛方法來(lái)實(shí)現(xiàn),后者是通過(guò)對(duì)同一函數(shù)名編寫多個(gè)不同的實(shí)現(xiàn)代碼來(lái)實(shí)現(xiàn)。8.下列關(guān)于接口的說(shuō)法,正確的是【 】。A) 接口中定義的方法都必須是虛方法B) 接口中定義的方法可以編寫其實(shí)現(xiàn)代碼C) 繼承接口的類可提供被繼承接口中部分成員的實(shí)現(xiàn)代碼D) 接口中的所有方法都必須在其派生類中得到實(shí)現(xiàn)。9.下列關(guān)于虛方法的描述中,正確的是【 】。A) 虛方法能在程序執(zhí)行時(shí)動(dòng)態(tài)確定要調(diào)用的方法,因此比非虛方法更靈活B) 在定義虛方法時(shí),基類和派生類的方法定義語(yǔ)句中都要帶上virtual修飾符C) 在重寫基類的虛方法時(shí),為消除隱藏基類成員的警告,需要帶上new修飾符D) 在重寫基類的虛方法時(shí),需要同時(shí)帶上virtual和override修飾符10.在C中,以下關(guān)于抽象類的敘述中錯(cuò)誤的是【 】。A) 抽象類可以包含抽象方法 B) 含有抽象方法的類一定是抽象類C) 抽象類不能被實(shí)例化 D) 抽象類可以是密封類11.在C中,以下關(guān)于抽象類和接口的敘述中正確的是【 】。A) 抽象類可以包含非抽象方法,而接口不包含任何方法的實(shí)現(xiàn)B) 抽象類可以被實(shí)例化,而接口不能被實(shí)例化C) 抽象類不能被實(shí)例化,而接口可以被實(shí)例化D) 抽象類能夠被繼承,而接口不能被繼承12.在C中,以下關(guān)于抽象類和接口的敘述中正確的是【 】。A) 在抽象類中,所有的方法都是抽象方法B) 繼承自抽象類的子類必須實(shí)現(xiàn)其父類(抽象類)中的所有抽象方法C) 在接口的定義中可以有方法實(shí)現(xiàn),在抽象類的定義中不能有方法實(shí)現(xiàn)D) 一個(gè)類可以從多個(gè)接口繼承,也可以從多個(gè)抽象類繼承13.以下類和接口的區(qū)別中正確的是【 】。A) 類可以繼承而接口不可以 B) 類不可以繼承而接口可以C) 類可以多繼承而接口不可以 D) 類不可以多繼承而接口可以14.下列方法定義中,【 】是抽象方法。A) static void func(){ } B) virtual void func(){ } C) abstract void func(){ } D) overridel void func(){ }15.下列關(guān)于接口的說(shuō)法,錯(cuò)誤的是【 】。A) 一個(gè)類可以有多個(gè)基類和多個(gè)基接口 B) 抽象類和接口都不能被實(shí)例化C) 抽象類自身可以定義成員,而接口不可以 D) 類不可以多重繼承,而接口可以。16.已知類Base、Derived的定義如下:class Base{ public void Hello() { (“Hello in Base!”)。 } }class Derived: Base{ public new void Hello() { (“Hello in Derived!”)。 }}則下列語(yǔ)句段在控制臺(tái)中的輸出結(jié)果是【 】。 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.關(guān)于繼承,下列說(shuō)法正確的是【 】。A) 子類將繼承父類所有的成員 B) 子類將繼承父類的非私有成員C) 子類只繼承父類public成員 D) 子類只繼承父類的方法,而不繼承屬性18.下列是抽象類的聲明的是【 】。A) abstract class figure{ } B) class abstract figure{ } C) seald class figure{ } D) static class figure{ }19.a(chǎn)bstract修飾的方法是抽象方法,抽象方法只有聲明而無(wú)主體,且【 】。A) 只能存在于抽象類中 B) 可以在任何類中 C) 只能在接口中 D) 只能在密封類中20.重寫一個(gè)基類的虛方法時(shí),應(yīng)與原虛方法的方法名相同,并且【 】。A) 不能改變方法的參數(shù)類型、個(gè)數(shù)和返回值 B) 可以改變方法的參數(shù)類型、個(gè)數(shù)和返回值 C) 可以改變方法的返回值D) 可以改變方法的參數(shù)類型和個(gè)數(shù)21.下面有關(guān)繼承的說(shuō)法中,正確的是【 】。A) A類和B類均有C類需要的成員,因此可以從A類和B類共同派生出C類 B) 在派生新類時(shí),可以指明是公有派生、私有派生或保護(hù)派生 C) 派生類可以繼承基類中的成員,同時(shí)也繼承基類的父類中的成員D) 在派生類中,不能添加新的成員,只能繼承基類的成員22.為了防止從所修飾的類派生出其他類,可以將此類定義為【 】。A) 抽象類 B) 密封類 C) 靜態(tài)類 D) 私有類23.若想從派生類中訪問(wèn)基類的成員,可以使用【 】。A) this關(guān)鍵字 B) me關(guān)鍵字 C) base關(guān)鍵字 D) override關(guān)鍵字24.下面有關(guān)派生類的描述中,不正確的是【 】。A) 派生類可以繼承基類的構(gòu)造函數(shù) B) 派生類可以隱藏和重載基類的成員C) 派生類不能訪問(wèn)基類的私有成員 D) 派生類只能有一個(gè)直接基類25.C中的多態(tài)不能通過(guò)【 】實(shí)現(xiàn)。A) 接口 B) 抽象類 C) 密封類 D) 虛方法26.下列程序錯(cuò)誤的原因是【 】。 sealed class SealedClass{ } class Derived:SealedClass{ }A) SealedClass類不能被繼承 B) 沒(méi)有Main()入口 C) SealedClass沒(méi)有被實(shí)例化 D) 以上皆是27.下面關(guān)于接口的敘述中,不正確的是【 】。A) 接口只是由方法、屬性、索引器或事件組成的框架,并沒(méi)有描述任何對(duì)象的實(shí)例代碼 B) 接口的所有成員都被自動(dòng)定義為公有的,不可使用訪問(wèn)修飾符來(lái)定義接口成員 C) 類可以通過(guò)在類型定義語(yǔ)句中包括冒號(hào)和接口名來(lái)表明它正在實(shí)現(xiàn)接口 D) 一個(gè)類只能實(shí)現(xiàn)一個(gè)接口28.接口可以包含一個(gè)或多個(gè)成員,以下選項(xiàng)中【 】不能包含在接口中。A) 方法 B) 屬性 C) 事件 D) 常量29.下列敘述中,正確的是【 】。A) 接口中可以有虛方法 B) 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口 C) 接口能被實(shí)例化 D) 接口中可以包含已實(shí)現(xiàn)的方法30. 關(guān)于虛方法實(shí)現(xiàn)多態(tài),下列說(shuō)法錯(cuò)誤的是【 】。A) 定義虛方法使用關(guān)鍵字virtual B) 關(guān)鍵字virtual可以與override一起使用C) 虛方法是實(shí)現(xiàn)多態(tài)的一種應(yīng)用形式 D) 派生類是實(shí)現(xiàn)多態(tài)的一種應(yīng)用形式31. 以下類MyClass的定義中,【 】是合法的抽象類。A) abstract class MyClass { public abstract int getCount()。 }B) abstract class MyClass { public virtual abstract int getCount()。 }C) abstract class MyClass { private abstract int getCount()。 }D) abstract class MyClass { public static abstract int getCount()。 }32. 分析下列程序中類MyClass的定義class BaseClass{ public int i。 }class MyClass:BaseClass{ public new int i。 }則下列語(yǔ)句在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接口,實(shí)現(xiàn)此接口代碼正確的是【 】。interface IPlay { void Play()。 void Show()。 }A) class Teacher :Iplay{ void Play(){ //省略部分代碼 }void Show0{ //省略部分代碼} B) class Teacher :Iplay{ public string Play(){ //省略部分代碼 }public void Show0{ //省略部分代碼} C) class Teacher :