SIKI学习——C#中级教程_12练习1-7 面向对象编程练习

这是一篇关于C#中级教程的面向对象编程练习题目,涵盖了方法重写、接口、抽象类等多个主题。题目涉及方法重写的override关键字、接口的定义与实现、抽象类与接口的区别、多继承等概念,适合巩固C#面向对象编程知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.练习1-7 面向对象编程练习

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

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

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

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

5.可以使用(a)关键字重写方法
a) Override
b) New

6.以下叙述正确的是:(bc)
A.接口中可以有虚方法。
B.一个类可以实现多个接口。
C.接口不能被实例化。
D.接口中可以包含已实现的方法。

7.下列代码输出为( B )

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

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

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
	}
}

答:2 5 1 6

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

10.阅读以下的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 )。(选择一项)
a. 打印 重写的方法 打印 重写的方法
b. 打印 打印 重写的方法
c. 打印
d. 程序有误,不能运行

11.在C#的语法中,( a )关键字可以实现在派生类中对基类的虚函数进行重载(选一项)
a> override
b> new
c> static
d> virtual

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

abstract class BaseClass
{
	public virtual void MethodA()
	{
		Console.WriteLine("BaseClass");
	}
	public virtual void MethodB(){}
}
class Class1: BaseClass
{
	public void MethodA()
	{
		Console.WriteLine("Class1");//如果一个虚函数在子类中没有通过override关键字,那么这个方法就没有被重写,而是被隐藏了。
	}
	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

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

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();//父类声明调用父类中的方法(因为是重写,隐藏方法),是子类构造的所以回去调用打印B的方法
	a.Fun(); 
	} 
}

A. A B A.Fun()
B. A B B.Fun()
C. B A A.Fun()
D. B A B.Fun()

14.以下叙述正确的是( bc ):
A. 接口中可以有虚方法。
B. 一个类可以实现多个接口。
C. 接口不能被实例化。
D. 接口中可以包含已实现的方法。

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

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

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

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

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

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

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

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

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方法没有实现

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

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中实现该方法

21.c#中 下列代码运行结果是(a)(选择一项)

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)学生都要考试 学生都要考试

22.c#中 下列代码的运行结果是( a )(选择一项)

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(st2.name);	
	}
}

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

23.在C#中,下列( a )关键字用于重写基类的虚拟方法。(选择一项)
a)override
b)new
c)base
d)virtual

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值