面试题答案
一键面试1. 以public方式继承
- 基类public成员:在派生类中仍然是public成员。这是因为public继承意味着“是一个”的关系,派生类对象应该具有与基类对象相同的对外接口,所以基类的public成员在派生类中保持其public属性,这样派生类对象可以像基类对象一样直接访问这些成员。
- 基类protected成员:在派生类中变为protected成员。protected成员对于基类自身和派生类是可见的,但对于外部代码不可见。在public继承下,为了保证派生类内部可以访问这些成员,同时又限制外部代码的访问,所以将其变为protected。
- 基类private成员:在派生类中不可访问。private成员是基类的内部实现细节,即使通过继承,派生类也不应该直接访问基类的private成员,这符合封装的原则,保证了基类的实现细节对派生类的隐藏。
2. 以private方式继承
- 基类public成员:在派生类中变为private成员。private继承表示派生类只是使用了基类的实现,而不是“是一个”基类对象。将基类的public成员变为private,使得这些成员只能在派生类内部访问,外部代码无法访问,这有助于隐藏基类的接口,仅让派生类自己使用基类的功能。
- 基类protected成员:在派生类中变为private成员。同样,为了将基类的实现细节限制在派生类内部,protected成员也变为private,派生类内部可以访问,但外部无法访问。
- 基类private成员:在派生类中不可访问。原因同public继承,private成员是基类的私有实现,不应该被派生类直接访问。
3. 以protected方式继承
- 基类public成员:在派生类中变为protected成员。protected继承介于public和private继承之间,它表示派生类对象不是完全与基类对象有相同的对外接口,但派生类及其派生类可以访问这些成员。所以将基类public成员变为protected,使得这些成员对于派生类及其派生类可见,而对外部代码不可见。
- 基类protected成员:在派生类中仍然是protected成员。保持其protected属性,确保派生类及其派生类可以访问这些成员,同时限制外部代码的访问。
- 基类private成员:在派生类中不可访问。理由与上述两种继承方式相同,private成员是基类的私有实现,不能被派生类直接访问。