任务六 同步训练
知识点
一、填空题
1. 面向对象编程简称 ________,它是一种编程思想,并不是一个编程技术。
答案:OOP。OOP = Object-Oriented Programming,面向对象编程。
2. 面向对象的三大技术特征:、、________。
答案:封装;继承;多态。这三大特征是面向对象编程的核心。
3. 设计类时,将本类型相关的 ________ 和 ________ 都放入类内统一管理,将用户需要的内容暴露给用户,细节进行隐藏。
答案:数据;操作(方法)。封装将数据和操作数据的方法放在一起,隐藏细节。
4. 默认情况下,如果什么都不写,成员变量或成员方法的访问、修改权限默认是 ________ 类型。
答案:private。C#中类成员的默认访问修饰符是private。
5. 委托是一种 ________ 类型变量,用于存储某个 ________ 的内存地址。
答案:引用;方法。委托是引用类型,存储的是方法的引用(内存地址)。
6. 方法的 、 决定了一个方法的签名。
答案:参数类型;参数个数。方法签名由参数类型和参数个数决定(也包含参数顺序)。
7. 在C#中定义接口时,使用的关键字是 ________。
答案:interface。使用
interface关键字声明接口。
8. 在C#中定义委托时,使用的关键字是 ________。
答案:delegate。使用
delegate关键字声明委托。
二、选择题
1. 只允许类内方法访问、修改的权限控制符是( )。
- A. private
- B. protected
- C. internal
- D. public
答案:A。private私有访问修饰符,只能在定义它的类内部访问。
2. 任何方法都可以对其访问、修改的权限控制符是( )。
- A. private
- B. protected
- C. internal
- D. public
答案:D。public公共访问修饰符,任何代码都可以访问。
3. 类的以下特性中,可以用于方便地重用已有的代码和数据的是( )。
- A. 多态
- B. 封装
- C. 继承
- D. 抽象
答案:C。继承允许子类重用父类的代码和数据,是实现代码重用的重要手段。
4. 以下关于类和对象的说法中,不正确的是( )。
- A. 类包含了数据和对数据的操作
- B. 一个对象一定属于某个类
- C. 密封类不能被继承
- D. 可由抽象类生成对象
答案:D。抽象类不能直接实例化生成对象,只能通过其派生类来创建对象。
5. 下列说法正确的是( )。
- A. 不需要定义类,就能创建对象
- B. 属性可以定义为抽象的
- C. 对象中必须有属性和方法
- D. 常量不能作为类成员
答案:B。属性可以定义为抽象的(abstract),在抽象类中声明抽象属性,由派生类实现。
6. 下列说法正确的是( )。
- A. 允许一个子类有多个父类
- B. 某个类是一个类的子类,它仍有可能成为另一个类的父类
- C. 一个父类只能有一个子类
- D. 继承关系最多不能超过4层
答案:B。C#支持单继承但可以传递,一个类可以是某个类的子类同时也是另一个类的父类。
7. 下面有关静态方法的描述中,正确的是( )。
- A. 静态方法属于类,不属于实例
- B. 静态方法可以直接用类名调用
- C. 静态方法中,可以访问非静态的局部变量
- D. 静态方法中,可以访问静态的变量
答案:A、B、D。静态方法属于类,可通过类名调用,可以访问静态变量。但不能直接访问非静态成员(C错误)。
8. 在类的外部可以被访问的成员是( )。
- A. public成员
- B. private成员
- C. protected成员
- D. protected internal成员
答案:A。只有public成员可以在类的外部被任意访问。private只能在类内,protected只能被子类访问。
9. 面向对象编程中的"继承"的概念是指( )。
- A. 对象之间通过消息进行交互
- B. 派生自同一个基类的不同类的对象具有一些共同特征
- C. 对象的内部细节被隐藏
- D. 派生类对象可以不受限制地访问所有的基类对象
答案:B。继承使派生自同一基类的不同类具有共同的属性和方法,体现了代码的重用。
10. 在C#的类结构中,class关键字前面的关键字表示访问级别,下面关键字表示该类只能被这个类的成员或派生类成员访问的是( )。
- A. public
- B. private
- C. internal
- D. protected
答案:D。protected表示只有该类和其派生类可以访问。
11. 下列类型中,不属于引用类型的是( )。
- A. String
- B. int
- C. Class
- D. Delegate
答案:B。int是值类型,String、Class、Delegate都是引用类型。
12. 下列关于C#面向对象应用的描述中,正确的是( )。
- A. 派生类是基类的扩展,派生类可以添加新的成员,也可去掉已经继承的成员
- B. abstract方法的声明必须同时实现
- C. 声明为sealed的类不能被继承
- D. 接口像类一样,可以定义并实现方法
答案:C。sealed修饰符表示密封类,不能被继承。A错误(不能去掉继承的成员),B错误(abstract方法没有实现),D错误(接口不包含方法实现)。
13. C#中MyClass为一自定义类,其中有方法 public void Hello(),使用 MyClass obj = new MyClass() 创建对象后,访问Hello方法是( )。
- A.
obj.Hello() - B.
obj::Hello() - C.
MyClass.Hello() - D.
MyClass::Hello()
答案:A。通过对象名加点号调用实例方法:
obj.Hello()。::是C++的作用域运算符,C#中不使用。
14. 在定义类时,如果希望类的某个方法能够在派生类中进一步进行改进,以处理不同的派生类的需要,则应将该方法声明成( )。
- A. sealed方法
- B. public方法
- C. virtual方法
- D. override方法
答案:C。virtual虚方法允许在派生类中通过override重写,实现多态。
15. C#的引用类型包括类、接口、数组、委托、object和string。其中object( )根类。
- A. 只是引用类型的
- B. 只是值类型的
- C. 只是string类型的
- D. 是所有值类型和引用类型的
答案:D。object是所有类型(包括值类型和引用类型)的最终基类。
三、操作题
题目要求:
定义一个员工类(Employee):
属性字段:公司名字、名字、工号
行为:
- 自我介绍(IntroduceSelf):输出"我是xxx公司的xxx,工号为xxx"
- 打电话(call):输出"给xxx打电话,我是xxx公司的xxx,工号为xxx"
编写主方法(Main),创建两名员工:
- 阿里集团王飞1001
- 阿里集团孙婷1002
使用对象进行初始化,然后进行拜访业务:
- 王飞拨打"13501234567"
- 孙婷拨打"13507654321"
参考代码:
public class Employee
{
private string company; // 公司名字
private string name; // 名字
private string id; // 工号
// 构造函数
public Employee(string company, string name, string id)
{
this.company = company;
this.name = name;
this.id = id;
}
// 自我介绍
public void IntroduceSelf()
{
Console.WriteLine("我是" + company + "公司的" + name + ",工号为" + id);
}
// 打电话
public void Call(string phoneNumber)
{
Console.WriteLine("给" + phoneNumber + "打电话,我是" + company + "公司的" + name + ",工号为" + id);
}
}
class Program
{
static void Main(string[] args)
{
Employee wangfei = new Employee("阿里集团", "王飞", "1001");
Employee sunting = new Employee("阿里集团", "孙婷", "1002");
wangfei.IntroduceSelf();
wangfei.Call("13501234567");
sunting.IntroduceSelf();
sunting.Call("13507654321");
Console.ReadLine();
}
}
运行结果:
我是阿里集团公司的王飞,工号为1001
给13501234567打电话,我是阿里集团公司的王飞,工号为1001
我是阿里集团公司的孙婷,工号为1002
给13507654321打电话,我是阿里集团公司的孙婷,工号为1002