单选题 已知3个类O、P和Q,类O中定义了一个私有方法F1、一个公有方法F2和一个受保护的方法F3;类P和类Q是类O的派生类,其继承方式如下所示。
class P: protected O …;
class Q: publie O …);
关于方法F1的描述中正确的是______;关于方法F2的描述中正确的是______;关于方法F3的描述中正确的是______。

单选题 A.方法F1无法被访问 B.只有在类O内才能访问方法F1
C.只有在类P内才能访问方法F1 D.只有在类Q内才能访问方法F1
【正确答案】 B
【答案解析】
单选题 A.类O、P和Q的对象都可以访问方法F2
B.类P和Q的对象都可以访问方法F2
C.类O和Q的对象都可以访问方法F2
D.只有在类P内才能访问方法F2
【正确答案】 C
【答案解析】
单选题 A.类O、P和Q的对象都可以访问方法F3
B.类O、P和Q的对象都不可以访问方法F3
C.类O和Q的对象都可以访问方法F3,但类p的对象不能访问方法F3
D.类P和Q的对象都可以访问方法F3,但类Q的对象不能访问方法F3
【正确答案】 B
【答案解析】[解析] 解答此类试题的一般思路是掌握类的各种继承方式及它们的访问权限。
面向对象技术解决软件复用的途径之一是采用继承机制。在继承关系中存在着基类和派生类两种类型,访问控制方式主要有public(公有派生)、protected(保护派生)和private(私有派生)。基类中成员的访问权限在派生类中的继承关系如表7-11所示。
表7-11 访问权限的继承关系表
派生性质 在基类中的访问权限 在派生类中的访问权限
Public
(公有派生)
public public
protected protected
private 不可访问
Protected
(保护派生)
public protected
protected protected
private 不可访问
Private
(私有派生)
public private
protected private
private 不可访问
根据试题中相关描述,以及“class P:protected O {…};”和“class Q:public O {…};”语句,结合表7-11的继承关系可知,类P、Q的成员函数及其访问控制如表7-12所示。
表7-12 类P、Q的成员函数及其访问控制表
类名 成员函数 访问控制 类名 成员函数 访问控制
P F1 prirate Q F1 private
F2 protected F2 public
F3 protected F3 protected
由试题的关键信息“类O中定义了一个私有方法F1”可知,方法F1是基类O的private(私有)成员。同时通过表7-12可知,类P、Q继承了F1方法,但其访问权限是private,结合表7-11最后一行的继承关系可得,只有基类O的内部成员才能访问方法F1,而派生类P、Q的内部成员是不可访问方法F1的。因此第一空缺处的正确答案是选项B。
由于方法F2是基类O中定义的一个公有方法,由此可知基类O的对象可以访问方法F2,因此第二空缺处选项D的描述是错误的。
通过表7-12可知,类Q继承了F2方法,其访问权限也是public,因此派生类Q的对象可以访问方法F2。
在表7-12中类P对方法F2的访问权限是protected,结合表7-11第4行的继承关系可得,派生类P的对象是不可访问方法F2的,只有在派生类P的的内部成员才可以访问方法F2。因此空缺处的正确答案是选项C。
同理,由于方法F2是基类O中定义的一个受保护的方法,通过表7-12可知,派生类P、Q对F3方法的访问权限均是protected,结合表7-11第5行的继承关系可得,基类O和派生类P、Q的对象都不能可访问方法F3,只有在类O、P、Q的内部成员才可以访问方法F3。因此问题的正确答案是选项B。