- 浏览: 87491 次
- 性别:
- 来自: 广州
最新评论
因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。。。
今天抓紧时间给大家说说super和this两个指针。
上一次我们说到类继承的时候,遗留了一个问题。如果我们对父级方法进行重写,然而在里面我们可能还会保留父级方法大部分的逻辑,而只是在头或尾或一头一尾做一些额外的操作(就像AOP一样)。这时候我们很希望可以直接调用父级的原方法逻辑。
怎么办?其实我们可以通过super这个指针来实现这个愿望。先看以下例子:
执行结果:
在下个例子里面,我们通过super指针调用了父级的构造函数,以及在重写的play()方法中调用了父类的play()方法。
在java初始化对象的时候,就会把方法及字段归类到一个类的super和this指针下面。它们用于区别哪些方法是来自父类的,哪些来自子类的。所以被重载的方法其实会在同一个类里面有两份执行地址段,一份是给super的,一份是给this的,然后父级的再往上的东西。而super再往上的,都不可见。这样,就能够区分开本类中的方法和来自父级的方法。
再同一个类里面调用自己的方法,默认就带有this指针。那这个this指针又有什么用?
大家可以发现在上例中,我们的ChildClass(String)构造函数有这么一段:
所以this是用于区分本类的字段和外来参数的。因为外来参数的名字没有受到同方法或者同类里面的参数不允许同名这一规则的约束,所以往往会出现外来的参数和本累的字段同名这种情况。当发生赋值时,为了区分那个是字段,哪个是外来参数,我们就会用this来区分。这种用法的经典用例如下:
这个就是Java里面著名的setter方法。
关于这部分就只能说到这里了。下次会介绍java的循环写法
今天抓紧时间给大家说说super和this两个指针。
上一次我们说到类继承的时候,遗留了一个问题。如果我们对父级方法进行重写,然而在里面我们可能还会保留父级方法大部分的逻辑,而只是在头或尾或一头一尾做一些额外的操作(就像AOP一样)。这时候我们很希望可以直接调用父级的原方法逻辑。
怎么办?其实我们可以通过super这个指针来实现这个愿望。先看以下例子:
package extendsdemo; public class SuperThisDemo { public static void main(String[] args) { ChildClass child = new ChildClass("Car"); child.play(); } } class SuperClass { public SuperClass(String name) { System.out.println("I'm super constuctor with name ["+name+"]"); } public void play() { System.out.println("Nothing to play with"); } } class ChildClass extends SuperClass { private String myToy; public ChildClass(String myToy) { super("ChildClass"); this.myToy = myToy; } public void play() { System.out.println("I'd lost my "+myToy); super.play(); System.out.println("What a shame! :("); } }
执行结果:
在下个例子里面,我们通过super指针调用了父级的构造函数,以及在重写的play()方法中调用了父类的play()方法。
在java初始化对象的时候,就会把方法及字段归类到一个类的super和this指针下面。它们用于区别哪些方法是来自父类的,哪些来自子类的。所以被重载的方法其实会在同一个类里面有两份执行地址段,一份是给super的,一份是给this的,然后父级的再往上的东西。而super再往上的,都不可见。这样,就能够区分开本类中的方法和来自父级的方法。
再同一个类里面调用自己的方法,默认就带有this指针。那这个this指针又有什么用?
大家可以发现在上例中,我们的ChildClass(String)构造函数有这么一段:
private String myToy; public ChildClass(String myToy) { super("ChildClass"); this.myToy = myToy; }
所以this是用于区分本类的字段和外来参数的。因为外来参数的名字没有受到同方法或者同类里面的参数不允许同名这一规则的约束,所以往往会出现外来的参数和本累的字段同名这种情况。当发生赋值时,为了区分那个是字段,哪个是外来参数,我们就会用this来区分。这种用法的经典用例如下:
private String field; public void setField(String field) { this.field = field; }
这个就是Java里面著名的setter方法。
关于这部分就只能说到这里了。下次会介绍java的循环写法
发表评论
-
JAVA简单教程:数据库操作(三)——PreparedStatement和动态SQL
2010-03-12 12:30 8616如果我们的SQL语句是固 ... -
JAVA简单教程:数据库操作(二)
2010-03-10 11:09 2133今天来分析一下上次的 ... -
JAVA简单教程:数据库操作(一)
2010-03-05 16:40 1866最近依然是事情太多,一直无法坚持每天写份blog,对不起大家。 ... -
每天JAVA简单教学:枚举类
2010-02-02 14:41 1509今天给大家介绍一个JDK1.5的新特性:枚举类 先来看看以下 ... -
每天JAVA简单教学:类定义,成员类,抽象类及接口类
2010-01-27 11:58 1561最近忙得快疯掉了,而且着凉了病得好辛苦。。。不过今天还是能抓紧 ... -
每天JAVA简单教学:类型强转
2010-01-19 11:56 7581关于类型,我们说了不 ... -
每天JAVA简单教学:简单数据类型、地址比较和值比较
2010-01-18 11:48 2248昨天说了布朗运算,今天详细解释一下其中的==运算符和Objec ... -
每天JAVA简单教学:布朗运算
2010-01-15 14:46 2229布朗值,就是true和false,对于产生这两个值的运算,就是 ... -
每天JAVA简单教学:基本运算符
2010-01-13 18:09 1060今天来介绍一些基础运算符,先用int整数类型做介绍,最后用St ... -
每天简单JAVA教学:循环语法(二)
2010-01-07 10:07 1435自从JRE升级到1.5以后,java的for循环就更加方便了。 ... -
每天简单JAVA教学:循环语法(一)
2010-01-06 13:32 2059现在开始介绍跟变成有密切关系的Java语法,首先来介绍循环的写 ... -
每天简单JAVA教学:变量
2009-12-28 16:02 1226很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。 ... -
每天简单JAVA教学:类继承,重写、重构及重载,final的用法
2009-12-23 12:25 3974昨天事忙,所以没时间给大家写blog,抱歉一下。 今天说的内 ... -
每天简单JAVA教学:JVM的内存管理,static的用法
2009-12-21 14:41 2567今天的主题是介绍static和final这两个指示器的用法。但 ... -
每天简单JAVA教学:Modifier
2009-12-18 10:31 9514昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家 ... -
每天简单JAVA教学:方法的调用
2009-12-17 14:59 1245继续我们的简单教学。 ... -
每天简单JAVA教学:第一个main程序分析
2009-12-16 23:12 1548上次我们轻松地完成了H ... -
每天简单JAVA教学:Hello World!
2009-12-16 00:39 1508以下文章只适合新手,新是很新很新的新。。。。自认对编程和JAV ...
相关推荐
10.3.7 使用super调用父类中的方法和属性 278 10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 ...
Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式...本视频教程帮助你从新手小白到成为精通JAVA的高手,从软件的安装,功能的介绍和使用,实战演习讲解等各大维度进行详细的教学.
10.3.7 使用super调用父类中的方法和属性 278 10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 ...
模块5 深入Java面向对象 《Java程序设计案例教程》教学课件05深入Java面向对象全文共47页,当前为第1页。 学习目标 01 了解Java面向对象程序设计的思想原则。 02 掌握类的结构、定义及对象的创建和使用。 03 掌握...
第5 版 清华大学出版社 “SCJP学习指南” 人民邮电出版社 “Java 编程思想” 第3版 机械工业出版社 教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 ...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 ...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个...
《java jdk 7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。 《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是...
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究, 1/16 页 1.1 Java Swing GUI 组件技术教学参考示例(第 2 部分) 1.1.1 Swing ToolBar 组件的应用实例 1、窗口内的...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2...
实验报告封面 课程名称: Android平台开发与应用 课程代码: SM3004 任课老师: 梁郁君 实验指导老师: 梁郁君 实验报告名称:实验10 Android数据存储与IO 学生姓名: 学号: 教学班: 递交日期: 签收人: 我申明,...