父类和子类的继承关系与父类的关系

百度题库旨在为考生提供高效的智能备考服务全面覆盖中小学财会类、建筑工程、职业资格、医卫类、计算机类等领域。拥有优质丰富的学习资料和备考全阶段的高效垺务助您不断前行!

父类的私有成员父类和子类的继承关系是无法直接调用的这就意味着父类和子类的继承关系只能间接调用父类的私有成员,其途径就是通过父类对父类和子类的继承关系可见的接口比如说protected或者public

接口。以前我以为父类和子类的继承关系是无法使用父类私有成员的这个认识有点片面。

父类和子类的继承關系的对象必然包含父类的对象并且父类的对象成分是在父类和子类的继承关系之前构造完成的。而C++是通过成员初始化列表来完成次任務的如下图所示:

如果你没有在成员初始化列表中显式地调用父类构造函数,它也会调用父类的默认构造函数

此外,父类和子类的继承关系和父类之间还有两个关系

1、父类的指针或者引用可以指向父类和子类的继承关系。有趣的是在这种情况下你用这个指针或者引用嘚成员属于父类如下图所示:

这是为什么?因为C++规定指针或者引用的类型必须与被赋值的类型保持一致

这有什么用?这可以为父类和孓类的继承关系调用父类的成员

形参中有父类指针或者引用的函数既可以供父类对象使用也可以供父类和子类的继承关系对象使用,即父类和子类的继承关系类型可以转化为父类类型

但是父类和子类的继承关系对象不可以赋值给父类对象,如下图所示:

那么用父类和子類的继承关系对象去初始化父类对象的实质是什么呢实质上是用父类和子类的继承关系对象的父类成分而不是全部父类和子类的继承关系对象,去初始化父类对象使用父类的指针或者引用指向父类和子类的继承关系对象也是同理。

它们都用到了COPY赋值操作符或者COPY构造函数因为父类中的形参是父类类型,父类和子类的继承关系类型可以隐式地转换成父类类型参与运算

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法内部类的语法,继承相关的语法异常的语法,线程的语...

一、父类引用指向父类和子类的繼承关系对象时

1、若父类和子类的继承关系覆盖了某方法则父类引用调用父类和子类的继承关系重新定义的新方法

2、若父类和子类的继承关系未覆盖某方法,则父类引用调用父类本身的旧方法

3、若父类和子类的继承关系覆盖了某属性但父类引用仍调用父类本身的旧属性

4、若父类和子类的继承关系未覆盖某属性,则父类引用调用父类本身的旧属性

5、父类引用不能访问父类和子类的继承关系新定义的方法

二、父类和子类的继承关系引用指向自身对象时

1、若父类和子类的继承关系覆盖了某方法则父类和子类的继承关系引用调用父类和子类的繼承关系重新定义的新方法

2、若父类和子类的继承关系未覆盖某方法,则父类和子类的继承关系引用调用父类本身的旧方法

3、若父类和子類的继承关系覆盖了某属性则父类和子类的继承关系引用调用父类和子类的继承关系重新定义的新属性

4、若父类和子类的继承关系未覆蓋某属性,则父类和子类的继承关系引用调用父类本身的旧属性

5、父类和子类的继承关系引用可以访问父类和子类的继承关系新定义的方法

b.f1();// 父类和子类的继承关系覆盖了该方法所以父类引用调用新方法 b.f2();// 父类和子类的继承关系未覆盖该方法,所以父类引用调用旧方法 // b.f3();此行去掉注释会报错父类引用不能访问父类和子类的继承关系新定义方法 c.f1();// 父类和子类的继承关系覆盖了父类方法,所以调用新方法 c.f2();// 父类和子类嘚继承关系未覆盖父类方法所以调用旧方法 c.f3();// 父类和子类的继承关系调用自己新定义的方法

我要回帖

更多关于 父类和子类的继承关系 的文章

 

随机推荐