继承1

继承的是什么

类的继承,将一些类似于通用模板的类进行进一步的创新加工,
超类:最初的那个类,功能反而相对少
子类:继承超类的实例字段、方法

继承的格式:

(类的状态) class 超类 extends 子类
例如:
public class Manager extends Employee

继承的一些规则

一般子类可以使用父类中所有的内容(包括 方法、实例)

遇到特殊情况,如父类方法和子类方法名字一样,实例字段名字一样

情况一:实例字段一样

优先寻找子类中的元素

class father{
   int num  = 100;
}
public class extends son{
    int num = 200;
    System.out.println(num); // 结果是200
}

情况二:方法名一样

调用原来类的方法,可以用this , super等关键词

this: 这个类的内容

super:表示超类的内容

class father{
    private int num  = 100;
    public int method{
        return num;
    }
}
public class extends son{
    int num = 200;
    public int method{
        int num1 = super.method();
        return num1 + num;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于C++继承的问题,我会尽力回答。以下是代码和注释: ```cpp #include <iostream> using namespace std; // 不带虚拟继承的父类 class A { public: int a; }; // 不带虚拟继承的子类1 class B1 : public A { public: int b1; }; // 不带虚拟继承的子类2 class B2 : public A { public: int b2; }; // 不带虚拟继承的菱形继承 class C : public B1, public B2 { public: int c; }; // 带虚拟继承的父类 class VA { public: int va; }; // 带虚拟继承的子类1 class VB1 : virtual public VA { public: int vb1; }; // 带虚拟继承的子类2 class VB2 : virtual public VA { public: int vb2; }; // 带虚拟继承的菱形继承 class VC : public VB1, public VB2 { public: int vc; }; // 主函数 int main() { cout << "sizeof(int): " << sizeof(int) << endl; // 输出int类型的内存大小 cout << "sizeof(A): " << sizeof(A) << endl; // 输出不带虚拟继承的父类A的内存大小 cout << "sizeof(B1): " << sizeof(B1) << endl; // 输出不带虚拟继承的子类B1的内存大小 cout << "sizeof(B2): " << sizeof(B2) << endl; // 输出不带虚拟继承的子类B2的内存大小 cout << "sizeof(C): " << sizeof(C) << endl; // 输出不带虚拟继承的菱形继承类C的内存大小 cout << "sizeof(VA): " << sizeof(VA) << endl; // 输出带虚拟继承的父类VA的内存大小 cout << "sizeof(VB1): " << sizeof(VB1) << endl; // 输出带虚拟继承的子类VB1的内存大小 cout << "sizeof(VB2): " << sizeof(VB2) << endl; // 输出带虚拟继承的子类VB2的内存大小 cout << "sizeof(VC): " << sizeof(VC) << endl; // 输出带虚拟继承的菱形继承类VC的内存大小 return 0; } ``` 输出结果为: ``` sizeof(int): 4 sizeof(A): 4 sizeof(B1): 8 sizeof(B2): 8 sizeof(C): 16 sizeof(VA): 4 sizeof(VB1): 16 sizeof(VB2): 16 sizeof(VC): 24 ``` 可以看到,不带虚拟继承的菱形继承类C中,父类A的成员变量在子类B1和B2中都会出现一遍,因此C的内存大小为16个字节(8字节B1 + 8字节B2)。而带虚拟继承的菱形继承类VC中,父类VA的成员变量只会在子类VB1和VB2中出现一遍,因此VC的内存大小为24个字节(16字节VB1 + 16字节VB2 - 8字节VA)。虚拟继承可以避免菱形继承中的重复继承问题,但会增加一些额外的开销。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值