面向对象练习题

1.C#中的方法重写使用关键字()。
a. override
b. overload
c. static
d. Inherit

2.以下的C#代码,试图用来定义一个接口:

public interface IFile{
    int A;
    int delFile()    {
        A = 3;
    }
    void disFile();
}

关于以上的代码,以下描述错误的是()。(选择一项)
a. 以上的代码中存在的错误包括:不能在接口中定义变量,所以int A代码行将出现错误
b. 以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数
c. 代码void disFile();定义无错误,接口可以没有返回值
d. 代码void disFile();应该编写为void disFile(){}; //接口中不能去实现函数

3.在C#中,接口与抽象基类的区别在于()。
a.抽象基类可以包含非抽象方法,而接口只能包含抽象方法
b.抽象基类可以被实例化,而接口不能被实例化
c.抽象基类不能被实例化,而接口可以被实例化
d.抽象基类就是接口,它们之间无差别

4.在开发某图书馆的图书信息管理系统的过程中,开始为教材类图书建立一个TextBook类;现在又增加了杂志类图书,于是需要改变设计,则下面最好的设计应该是()。
a. 建立一个新的杂志类Journal。
b. 建立一个新的杂志类Journal,并继承TextBook类。
c. 建立一个基类Book和一个新的杂志类Journal,并让Journal类和TextBoook类都继承于Book类。
d.不建立任何类,把杂志图书的某些特殊属性加到TextBoook类中。

5.以下叙述正确的是:()(多选)
a. 接口中可以有虚方法。
b. 一个类可以实现多个接口。
c. 接口不能被实例化。
d. 接口中可以包含已实现的方法。

6.下列代码输出为():

class Father{
   public void F() { Console.WriteLine("A.F"); }
   public virtual void G() { Console.WriteLine("A.G"); }
}
class Son: Father{
   new public void F() { Console.WriteLine("B.F"); }//隐藏了父类中的方法,父类中的F方法还存在
   public override void G() { Console.WriteLine("B.G"); }//重写了父类中的方法,父类中的G方法就不存在了
}
class override_new{
   static void Main() {
      Son b = new Son();
      Father a = b;
      a.F();//通过父类声明的对象 调用隐藏方法,会调用父类中的  A.F
      b.F();//通过子类声明的对象 调用隐藏方法,会调用子类中的  B.F
      a.G();// B.G
      b.G();//B.G
   }
}

a. A.F B.F A.G B.G
b. A.F B.F B.G B.G
c. A.F A.F B.G B.G
d. B.F B.F B.G B.G

7.写出程序的输出结果:

public class A
{
    public virtual void Fun1(int i)
    {
        Console.WriteLine(i);
    }
    public void Fun2(A a)
    {
        a.Fun1(1);
        Fun1(5);
    }
}
public class B:A    {
    public override void Fun1(int i)
    {
        base.Fun1(i+1);
    }
    public static void Main()        {
        B b=new B();
        A a=new A();
        a.Fun2(b);//b.Fun1(1) a.Fun1(5) //2  5
        b.Fun2(a);//a.Fun1(1) b.Fun1(5)// 1   6
    }
}

8.在C#中,允许多接口继承,从多个接口时,使用“:”后跟继承的接口的名字,多个接口名称之间使用()符号进行分割。(选择一项)
a. ”.’
b. ”->”
c. ”,”
d. ”::”

9.阅读以下的C#代码:

class A
{
    public virtual void printStr(string str)
    {
        Console.WriteLine(str);
    }
}
class B:A
{
    public override void printStr(string str)
    {
        str=str+" 重写的方法";
        Console.WriteLine(str);
    }
}
class DefaultInitializerApp
{
    public static void Main()
    {
        B b=new B();
        A a=b;
        a.printStr("打印");
        b.printStr("打印");
        Console.ReadLine();
    }
}

运行程序后将在控制台窗口打印()。(选择一项)
a. 打印 重写的方法 打印 重写的方法
b. 打印 打印 重写的方法
c. 打印
d. 程序有误,不能运行

10.请问,此程序输出结果是()

abstract class BaseClass{

    public virtual void MethodA(){
        Console.WriteLine("BaseClass");
    }

    public virtual void MethodB(){}
}


class Class1: BaseClass{
    public void MethodA(){
        Console.WriteLine("Class1");
    }
    public override void MethodB(){}
}


class Class2: Class1{
        new public void MethodB(){}
}

class MainClass{
        public static void Main(string[] args){
        Class2 o = new Class2();
        o.MethodA(); 
    }
}

a. BaseClass b. BassClass Class1 c. Class1 d. Class1 BassClass

11.请问,此程序输出结果是()

public abstract class A {
    public A() { 
        Console.WriteLine('A'); 
    }

    public virtual void Fun() {
         Console.WriteLine("A.Fun()"); 
    } 
} 


public class B: A { 
    public B() { 
        Console.WriteLine('B'); 
    } 


    public new void Fun() { 
        Console.WriteLine("B.Fun()"); 
    } 


    public static void Main() {
        A a = new B();a.Fun(); 
    }
}

a. A B A.Fun()    
b. A B B.Fun()   
c. B A A.Fun()   
d. B A B.Fun()

12.以下叙述正确的是()(多选):

a. 接口中可以有虚方法。
b. 一个类可以实现多个接口。 c. 接口不能被实例化。
d. 接口中可以包含已实现的方法。

13.以下关于C#代码的说法正确的是()。(选择一项)

Public abstract Animal
{
    Public abstract void Eat();
    Public void Sleep()
    {
    }
}

a. 该段代码正确
b. 代码错误,因为类中存在非抽象方法
c. 代码错误,因为类中的方法没有实现
d. 通过代码“Animal an = new Animal();”可以创建一个Animal对象

14.在C#中,关于继承和接口,以下说法正确的是() (单选)
a. C#允许许多接口实现,也允许多重继承
b. C#允许多接口实现,但不允许多重继承
c. C#不允许多接口实现,但允许多重继承
d. C#不允许多重接口实现,也不允许多重继承

15.在C#中,已知下列代码的运行结果是“老虎吃动物”,请问在空白处1和空白处2
分别应该填写的代码是()

Public class Animal
{
    Public 空白处1 void Eat()
    {
        Consone.WriteLine(“我要吃”);
    }
}

Public class Tiger:Animal
{
    Public 空白处2 void Eat() {
        Consone.WriteLine(“老虎吃动物”);
    }

    Public calssTest {
        Static void Main()
        {
            Animal an = new Tiger();
            an.Eat;
        }
    }
}

a. Virtual , new
b. override , virtual
c. virtual , override
d. new , virtual

16.在C#中,下列关于抽象类和接口的说法,正确的是()(选择一项)
a. 在抽象类中,所以的方法都是抽象方法
b. 继承自抽象类的子类必须实现起父类(抽象类)中的所以抽象方法
c. 在接口中,可以有方法实现,在抽象类中不能有方法实现
d. 一个类可以从多个接口继承,也可以从多个抽象类继承

17.关于以下C#代码的说法正确的是()

Public abstract class Animal{
    Public abstract void Eat();
}
Public class Tiger:Animal{
    Public override void Eat(){
        Console.WriteLine(“老虎吃动物”);
    }
}
Public class Tigress:Tiger{
    Static void Main(){
        Tigress tiger=new Tigress();
        tiger.Eat();
    }
}

a.代码正确,但没有输出
b.代码正确,并且输出为”老虎吃动物”;
c.代码错误,因为Tigress类没有实现抽象基类Animal中的抽象方法
d.代码错误,因为抽象基类Animal的Eat方法没有实现

18.在C#中 某程序员定义了一个IDataBase接口,以及实现该接口的类CDataBase ,下列关于该段代码说法正确的是()(选择一项)

public interface IDataBase {
    void OpenTable(string tableName);
    void UpdataTable(string tableName);
}

public class CDataBase:IDataBase {
    public void OpenTable(string tableName) {
        Console.WriteLine("打开数据表");

    }
    public void UpdataTable(string tableName) {
        Console.WriteLine("更新数据表");

    }
    static void Main() {
        CDataBase db = new CDataBase();
        db.OpenTable("Customers");
    }
}

a. 该段代码错误,因为在定义接口时,接口中的方法没有提供实现
b. 该段代码错误,因为接口中声明的方法不是公有的,应此在CDataBase类中不能访问接口中的方法
c. 该段代码正确,同时由于客户没有调用UpdataTable方法,可以把CDataTable类中的UpdataTable去掉,代码仍然正确
d. 该段代码正确,但是如果在IDataBase 接口中声明一个方法void Execute(string sql); 则必须在CDataBase中实现该方法

19.C#中 下列代码运行结果是()(选择一项)

public class Student{
        public virtual void Exam(){
            Console.WriteLine("学生都要考试");
        }
}
public class Undergraduate:Student{
        public new void Exam(){
            base.Exam();
            Console.WriteLine("大学生有选择考试科目的权利");
        }
}
public class Test{
        static void Main()    {
        Student stu = new Undergraduate();
        stu.Exam();
    }
}

a. 学生都要考试
b. 大学生有选择考试科目的权利
c. 大学生都要考试
大学生有选择考试科目的权利
d. 学生都要考试
学生都要考试

20.C#中 下列代码的运行结果是()(选择一项)

struct Student{
    public int age;
    public string name;
    public Student(int age,string name){
        this.age=age;
        this.name=name;
    }
}
public class Test{
    static void Mian(){
        Student stu1= new Student(18,"小方");
        Student stu2= new Student(24,"小刚");
        stu2=stu1;//在c#中 结构体是值类型,在这里赋值只会赋值其中变量的值
        stu1.age=30;
        stu1.name="小燕";
        Console.WriteLine(stu2.age);
        Console.WriteLine(stu2.name);
    }
}

a. 18 小方
b. 18 小燕
c. 30 小燕
d. 30 小方

1:a
2:d
3:a
4:c
5:bc
6:b
7:2 5 1 6
8:c
9:a
10:c
11:a
12:bc
13:a
14:b
15:c
16:b
17:b
18:d
19:a
20:a

results matching ""

    No results matching ""