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