`

[#0x0019] 关于继承的新认识:导出类调用基类方法其实是向上转型

    博客分类:
  • Java
EXT 
阅读更多

  前面对继承的理解常常用到了这么一用表述:Base的代码会被复制到Ext中。其实这么理解欠妥,看代码:

class Base
{
	private String inf = "Here is Base";
	
	public String getInf()
	{
		return inf;
	}
}

class Ext extends Base
{
	public static void main(String[] args)
	{
		Ext e = new Ext();
		
		System.out.println(e.getInf());
	}
}

  很明显,Base的private String inf是不能被继承的,所以就算getInf()的代码被复制到Ext中,Ext也是无法调用的getInf()的(Ext中没有inf)。所以e.getInf()其实隐藏了e的向上转型。

  所以我们至多只能说getInf()被复制到Ext的方法列表里。当然,“复制说”还是很形象的,有助理解,细节方面自己知道就好。

分享到:
评论

相关推荐

    C#中派生类调用基类构造函数用法分析

    主要介绍了C#中派生类调用基类构造函数用法,实例分析了派生类调用基类构造函数的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    在派生类的构造函数中调用基类的构造函数

    在C++编程中,派生类继承自基类,它扩展或修改了基类的功能。在创建派生类的对象时,需要确保基类的数据成员和成员函数也得到正确的初始化。这就涉及到了在派生类的构造函数中调用基类构造函数的知识点。 首先,每...

    C#定义基类并重写基类方法计算图形面积和周长的windows界面程序

    2.定义Shape类的派生类三角形Tangle,使用base关键字调用基类构造函数,重写Shape类继承的虚方法:求面积虚方法Mianji(),求周长虚方法Zhouchang()。 3.定义Shape类的派生类圆形Circle,重写Shape类继承的虚方法:...

    类的继承与基类

    **继承**是面向对象编程(OOP)的关键特性之一,它允许创建的新类(派生类或子类)从现有类(基类或父类)继承属性和行为。这一特性不仅简化了代码,提高了复用性,还支持了类之间的层次结构,增强了软件的可扩展性和...

    C#之用Base方法调用基类构造函数学习案例 c#经典案例.pdf

    基类通常包含一些通用的方法和属性,而派生类则可以继承这些方法和属性,并添加一些新的方法和属性。 在我们的案例中,我们定义了一个基类BaseClass和一个派生类DerivedClass。BaseClass中包含了两个构造函数,一个...

    DLL虚基类的方式导出类

    综上所述,使用虚基类的方式在DLL中导出类是解决多继承和版本兼容性问题的有效策略。但同时,这也要求开发者对C++的多态性、内存管理和DLL编程有深入的理解,以确保程序的稳定性和可靠性。在实际开发过程中,遵循...

    DLL导出类的三种方法,导出接口类,导出类指针,导出类,不建议使用导出类

    本篇将详细讲解DLL导出类的三种常见方法:导出接口类、导出类指针以及导出类,并说明为什么通常不建议直接导出类。 1. 导出接口类 接口类(Interface Class)是一种只包含纯虚函数的抽象基类,不包含任何数据成员...

    《Effective C++》摘记

    - **解释**: 虚基类用于解决钻石问题,确保派生类只继承一次基类的数据成员,避免重复定义。 ##### 总结 以上摘录自《Effective C++》中的知识点涵盖了C++编程中的许多重要方面,从基础语法到高级特性均有涉及。...

    按以下描述和要求建立两个类:基类 Rectangle(矩形类) 和派生类 Cube(正方体)

    - `Cube` 类从 `Rectangle` 类继承,因此它继承了矩形的属性和方法。 - `Cube` 类有私有成员变量 `name`(字符串)和 `h`(高度)。 - 公有成员包括: - 带缺省值的构造函数,接受矩形的坐标、立方体名称(字符...

    C#帮助类、各种基类等

    接下来,基类是继承体系的一部分,它定义了一组公共特性,这些特性可以被派生类继承。基类可以包含虚方法、抽象方法、属性和事件,使得子类可以重写或扩展这些特性。C#中的`System.Object`是所有类的最终基类,包含...

    Java入门需掌握的30个基本概念.pdf

    继承是一种创建新类的方式,新类继承现有类的特征和行为,从而减少了重复代码的编写。所有Java类都间接地继承自顶级父类`Object`,这是所有类的起点。通过继承,子类不仅可以复用父类的属性和方法,还可以定义自己...

    C++与操作系统等面试题30

    接口继承指的是一个类继承另一个类时,仅继承了父类的函数签名,而没有继承其实现。这种继承方式通常用于定义行为规范而非具体实现,类似于面向对象编程中的接口概念。 #### 应用场景: - **组件设计**:在设计可...

    面向对象程序设计C++上机实验报告

    派生类是从现有类继承而来的,它可以重用基类的成员,并且可以添加新的成员或修改继承的成员。在这个实验中,`StudentLevel`类是从`Student`类派生出来的,主要用于根据学生的总分计算其等级。 ```cpp class ...

    类的继承练习

    ### 第一个代码示例:基本的类继承 这个示例展示了如何在C++中创建一个基类(`base`)和一个派生类(`subs`)。`base`类有一个构造函数和析构函数,分别在对象创建和销毁时打印消息。`subs`类继承自`base`类,并...

    python编程经典示例代码

    - 异常类继承:通过继承内置异常类来创建新的异常类。 ##### 38. Chapter13.1: Searching String for a Substring 本章将介绍如何在字符串中查找子字符串。 - **知识点**: - 子字符串查找:掌握查找子字符串的...

    基类子类虚函数的调用顺序问题

    在C++编程语言中,虚函数(virtual functions)是实现多态性的一种关键机制,它允许我们通过指针或引用调用子类重写的方法,即使该指针或引用指向的是基类。当我们讨论基类与子类的虚函数调用顺序时,这涉及到构造...

    多继承和虚基类PPT

    构造函数不能被继承,所以,一个派生类的构造函数必须通过调用基类的某个构造函数来初始化基类子对象。派生类的构造函数只负责初始化在派生类中声明的数据成员。 基类与派生类对象示意图 基类与派生类对象的关系...

    C++ 课程作业 继承与派生 (motorcycle类设计(虚基类))

    从bicycle和motorcar派生出motorcycle,观察虚基类对继承的影响。 定义一个motorcycle的对象,分别调用run()和stop(),观察构造/析构函数的调用情况。 注意:构造函数和析构函数中均为cout语句,说明哪个构造/析构...

Global site tag (gtag.js) - Google Analytics