Java的继承体系中,因为有重写的概念,所以说this在子父类之间的调用到底是谁的方法,或者成员属性,的问题是一个值得思考的问题; 先说结论:如果在测试类中调用的是子父类同名的成员属性,这个this.成员  属性的值就是父类中这个成员属性的值,因为在Java中没有重写成员属性这一概念 ,如果调用的是同名的成员方法的话,那就应该调用的是重写后的成员方法.....如果子类中没有这个成员方法,则向父类中寻找. 上代码支持论证: package Test_This; public class Demo…
在继承关系下,父类中的this关键字并不总是表示父类中的变量和方法.this关键字的四种用法如前文所述,列举如下. 1) this(paras…); 访问其他的构造方法 2) this.xxx; 访问类中的成员变量xxx 3) this.yyy(paras…); 访问类中的成员方法yyy 4) this; 当前类对象的引用 对第一种,无论子类是否有相同参数的构造方法,this(paras…);访问的始终是父类中的构造方法. 对第二种,无论子类是否有覆盖了该成员变量,this.xxx;访问的始终是…
以容器类为例子,可以观一叶而知秋,看看以前的前辈们是如何处理各种面向对象思想下的继承体系的.读的源代码越多,就越要总结这个继承关系否则读的多也忘得快. 首先摆上一张图片: 看到这张图很多人就慌了,难道这些东西我都要全部学习?其实是也不是,其中的很多东西都很有学习的必要,但是学习的过程绝对不是一行一行背诵,每一个类有哪些方法.而怎么从大体上掌握这个继承体系呢? 以最基本的ArrayList<E>为例子.(JDK 1.8环境下) 从ArrayList<E>开始往上看继承体系: Arra…
首先一个简单的样例: int x; int f() { double x; cin >> x; return x; } 在上述代码中.函数f的局部变量x掩盖了全局变量x.这得从 "C++的名字查找机制"说起,首先.在函数f的局部作用域中查找.(甚至是语句块).假设不存在,到上一层的作用域再进行查找,... 该命名空间中查找,最后是全局作用域. 在类的继承体系中,名字覆盖问题也是非常困扰的.此处的"名字"但是是函数名,变量名,typedef, enum都能…
本篇随笔讨论一个比较冷门的知识,继承结构中内存对齐的问题,如今内存越来越大也越来越便宜,大部分人都已经不再关注内存对齐的问题了.但是作为一个有追求的技术人员,实现功能永远都是最基本的要求,把代码优化到自己想要的样子才能从中找到真正的愉悦感.这便是我们追求细节的意义. 声明:以下例子,以x86_64 64bit编译器编译的结果作为参考,32位编译器会有不同结果,这里不讨论. 目录 引子-内存对齐示例与规则 进阶-继承体系中的内存对齐 引子-内存对齐示例与规则: 讨论内存对齐,就要牵涉到#pragm…
java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 public interface BaseIF { void Access(); } 一个基类Base,基类实现了BaseIF接口,Access会调用Base类的public函数test()(实现类最好不要有自己的public函数,public函数应提到接口中,这里是为了说明问题方便) public cl…
---------------综述与目录-------------- 讨论这个问题之前我们先明确类的结构,一个类的大概组成,下面的很多分类名词都是我个人杜撰,为的就是让读者看懂能够区分,下面分别分类: 目录 空类 不含任何成员变量,也不继承某个基类. 结构类 像C语言中结构体一样,要么只包含基本数据类型,要么是其他构造类型的嵌套,或者两者兼而有之. 派生类 有至少一个基类. 多态类 本身是一个派生类,且基类中有虚函数. 以上只是大概的分类,细分会在下面的情况里讨论,该文章仅当作为个人使用C++经…
"成员变量,静态方法看左边:非静态方法:编译看左边,运行看右边." 意思是:当父类变量引用子类对象时(Fu f = new Zi();),在这个引用变量f指向的对象中,他的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了复写). 例: class Fu { intnum = 5; static void method4() { System.out.println("fu method_4"); } void me…
一.继承 1. 概述 继承是面向对象的重要特征之一,当多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那多个类中无需再定义这些属性和行为,只需继承那个单独的类即可. 单独的类称为父类或超类 多个类称为子类 例如: 猫和老虎都是属于猫科动物. 描述猫.老虎这些对象所创建的类,就是子类: 而描述猫科动物这个对象所创建的类,就是父类. 类与类之间存在了继承关系,子类可以直接访问父类中非私有的属性和行为,代码中通过 extends 关键字来表示继承关系. 例如:class Son exte…
Java IO体系之RandomAccessFile浅析 一.RandomAccessFile综述: 1.1RandomAccessFile简介 RandomAccessFile是java Io体系中功能最丰富的文件内容访问类.即可以读取文件内容,也可以向文件中写入内容. RandomAccessFile的唯一父类是Object,与其他流父类不同.是用来访问那些保存数据记录的文件的,这样你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.…