草庐IT

继承权

全部标签

Java SE 继承和多态 (图文搭配,万字详解!!)

目录1.继承1.1为什么需要继承1.2继承概念 1.3继承的语法1.4父类成员访问1.4.1子类中访问父类的成员变量1.4.2子类中访问父类的成员方法 1.5super关键字 1.6子类构造方法1.7super和this1.8再谈初始化1.9protected关键字1.10继承方式 1.11final关键字1.12继承与组合2.多态2.1多态的概念 2.2多态实现条件2.3重写2.4向上转移和向下转型2.4.1向上转型 2.4.2向下转型 1.继承1.1为什么需要继承Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实世界错综复杂,事物之

c++ - 为什么继承会影响异常处理?

在寻找thisquery的答案时通过编写测试代码,我了解到私有(private)/protected继承改变了从各种类接收异常的方式,这非常令人惊讶。为了找到我之前提到的论坛问题的答案,我遇到了thissimilarquestion.对我来说,使用protected继承基类和virtual方法是很明显的。撇开标准不谈,我想知道为什么在C++中异常处理在虚方法调用不是时受继承限制?以下片段对此进行了解释:structBase{virtualvoidprintError()=0;};classDerived:protectedBase{voidprintError(){}};intmain

c++ - 具有私有(private)继承的派生类中的友元函数

如果一个Derived类是从一个Base类私有(private)继承的,并且Derived类有一个友元函数f(),那么f()可以访问Derived类和Base类的哪些成员。classBase{public:inta;protected:intb;private:intc;};classDerived:privateBase{voidfriendf(){}public:intd;protected:inte;private:intf;};我理解如果一个类是从基类私有(private)继承的,那么在派生类中一切都是私有(private)的。但为什么在上面的代码中,函数f()可以访问a、b、

c++ - 虚函数和多重继承情况下的对象布局

我最近在接受采访时被问及有关具有虚函数和多重继承的对象布局。我在上下文中解释了它是如何在不涉及多重继承的情况下实现的(即编译器如何生成虚拟表,在每个对象中插入一个指向虚拟表的secret指针等等)。在我看来,我的解释似乎缺少了一些东西。所以这里有问题(见下面的例子)C类对象的确切内存布局是什么。C类的虚拟表条目。A、B和C类对象的大小(由sizeof返回)。(8、8、16??)如果使用虚继承呢?大小和虚拟表条目肯定会受到影响吗?示例代码:classA{public:virtualintfunA();private:inta;};classB{public:virtualintfunB(

C++:条件继承是否可能

我正在从事微处理器(Arduino)项目。我的库Foo继承自现有的库Basic。后来我将Basic的功能扩展到另一个类Advanced。但是,Advanced使硬件更加困难,使得其中一个已经制作的演示无法使用。我的想法如下:classFoo:#ifndefUSE_BASICpublicAdvanced#elsepublicBasic#endif{...}并将#defineUSE_BASIC放入我的演示代码中:#defineUSE_BASIC#include但是Foo没有继承自Basic。我在这里做错了吗?或者是否有其他方法可以解决这个问题? 最佳答案

c++ - 从没有默认构造函数的类继承的类

现在我有一个A类继承自B类,而B没有默认构造函数。我正在尝试为A创建一个构造函数,它具有与B的构造函数完全相同的参数structB{intn;B(inti):n(i){}};structA:B{A(inti){//...}};但我得到:error:nomatchingfunctionforcallto‘B::B()’note:candidatesare:B::B(int)我该如何解决这个错误? 最佳答案 构造函数应该是这样的:A(inti):B(i){}冒号后面的位表示“使用其int构造函数初始化该对象的B基类子对象,值为i”。我猜

c++ - C++中的简单继承

我正在为即将到来的测试复习一些样题,这个问题让我很困惑。考虑以下代码:classGraduateStudent:publicStudent{...};如果省略了“public”这个词,GraduateStudent使用私有(private)继承,这意味着下面哪个?GraduateStudent对象不能使用Student的方法。GraduateStudent无权访问Student的私有(private)对象。GraduateStudent的任何方法都不能调用Student的方法。只有GraduateStudent的const方法可以调用Student的方法。

c++ - 是否允许从 std 命名空间(即 std::wstring)中的类继承?

类std::wstring缺少一些对“普通”c字符串(和文字)的操作。我想在我自己的自定义类中添加这些缺失的操作:#includeclassCustomWString:publicstd::wstring{public:CustomWString(constchar*);constchar*c_str(void);};上面的代码在使用g++v4.4.1的UbuntuKarmic上编译得很好。但我想知道是否有人反对这样做?编辑:一些例子来阐明我所说的“缺失操作”的意思:std::wstringfoo("hello");//requirestheL()macroorsomethinglik

c++ - 继承成本是多少?

这是一个非常基本的问题,但我仍然不确定:如果我有一个将被实例化数百万次的类——是否建议不要从其他类派生它?换句话说,继承是否会带来一些我在实践中应该担心的成本(在构建或销毁对象的内存或运行时方面)?例子:classFoo:publicFooBase{//shouldIavoidderivingfromFooBase?//...};intmain(){//constructsmillionsofFooobjects...} 最佳答案 从类继承在运行时没有任何成本。如果基类中有变量,类实例当然会占用更多内存,但如果它们直接在派生类中并且

深度了解 Java中的 封装、继承

前言本篇博客在看完我上一篇类和对象的基础上增加新的语法知识。封装封装的概念什么叫做封装呢就是类似生活中有很多东西我们并不想让别人知道,比如自己的身份证、学生证、银行卡号等等包括一台电脑里面是一个复杂的结构产家那边会对电脑内部的零件进行包装。而在我们Java语言中,就有Java面对对象的三大特性之一——封装。封装就是隐藏对象的属性和实现的一些细节,仅提供公共访问方式让外界访问。该如何进行封装呢?这就用到Java中的访问限定符(修饰符)。在Java中,访问限定符有四类:private、default、protected、public。上面那张图片描述了这四类访问限定符的使用范围。下面我们来用代码图