- 浏览: 88900 次
- 性别:
- 来自: 广州
最新评论
因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。。。
今天抓紧时间给大家说说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 8698如果我们的SQL语句是固 ... -
JAVA简单教程:数据库操作(二)
2010-03-10 11:09 2172今天来分析一下上次的 ... -
JAVA简单教程:数据库操作(一)
2010-03-05 16:40 1905最近依然是事情太多,一直无法坚持每天写份blog,对不起大家。 ... -
每天JAVA简单教学:枚举类
2010-02-02 14:41 1553今天给大家介绍一个JDK1.5的新特性:枚举类 先来看看以下 ... -
每天JAVA简单教学:类定义,成员类,抽象类及接口类
2010-01-27 11:58 1605最近忙得快疯掉了,而且着凉了病得好辛苦。。。不过今天还是能抓紧 ... -
每天JAVA简单教学:类型强转
2010-01-19 11:56 7613关于类型,我们说了不 ... -
每天JAVA简单教学:简单数据类型、地址比较和值比较
2010-01-18 11:48 2305昨天说了布朗运算,今天详细解释一下其中的==运算符和Objec ... -
每天JAVA简单教学:布朗运算
2010-01-15 14:46 2279布朗值,就是true和false,对于产生这两个值的运算,就是 ... -
每天JAVA简单教学:基本运算符
2010-01-13 18:09 1092今天来介绍一些基础运算符,先用int整数类型做介绍,最后用St ... -
每天简单JAVA教学:循环语法(二)
2010-01-07 10:07 1518自从JRE升级到1.5以后,java的for循环就更加方便了。 ... -
每天简单JAVA教学:循环语法(一)
2010-01-06 13:32 2087现在开始介绍跟变成有密切关系的Java语法,首先来介绍循环的写 ... -
每天简单JAVA教学:变量
2009-12-28 16:02 1264很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。 ... -
每天简单JAVA教学:类继承,重写、重构及重载,final的用法
2009-12-23 12:25 4031昨天事忙,所以没时间给大家写blog,抱歉一下。 今天说的内 ... -
每天简单JAVA教学:JVM的内存管理,static的用法
2009-12-21 14:41 2612今天的主题是介绍static和final这两个指示器的用法。但 ... -
每天简单JAVA教学:Modifier
2009-12-18 10:31 9566昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家 ... -
每天简单JAVA教学:方法的调用
2009-12-17 14:59 1286继续我们的简单教学。 ... -
每天简单JAVA教学:第一个main程序分析
2009-12-16 23:12 1585上次我们轻松地完成了H ... -
每天简单JAVA教学:Hello World!
2009-12-16 00:39 1555以下文章只适合新手,新是很新很新的新。。。。自认对编程和JAV ...
相关推荐
这个"Java入门教学课件"显然是一个针对初学者设计的教程,包含了学习Java编程的基础概念和关键特性。让我们逐一解析每个文件所涵盖的知识点。 1. **第一讲_概述与运行环境.ppt**: - Java的起源和发展历程 - JVM...
Java教学大纲旨在帮助学生掌握Java这门流行的面向对象编程语言,为他们将来在软件开发领域的工作打下坚实的基础。课程分为理论教学、实验教学和项目实战三大部分,共计340学时,确保学生能够全面深入地理解和应用...
10.3.7 使用super调用父类中的方法和属性 278 10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 ...
同时介绍this和super关键字的使用。 8. **接口和基本类库**:理解接口的概念,学会接口的实现,熟悉常用的Java类库,如集合框架、IO流等。 9. **异常处理**:教授如何处理编译错误和运行时错误,掌握try-catch-...
Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式...本视频教程帮助你从新手小白到成为精通JAVA的高手,从软件的安装,功能的介绍和使用,实战演习讲解等各大维度进行详细的教学.
- 教学重点在于掌握Java的基本结构,以及如何编写和运行简单的Java程序。 第二部分:基础程序设计 - 这一部分涵盖了基本数据类型、常量、String类型和输入输出操作。学生需掌握Java的数据类型,变量声明,运算符和...
根据提供的文件信息,我们可以将《黑马JAVA49期全套教学视频》中的知识点归纳总结如下: ### 一、Java基础知识 #### 1. Java语言简介 - **定义与特点**:Java是一种面向对象的编程语言,它具有简单性、面向对象、...
Java中万物皆对象,每个类都是Object类的子类,学习如何使用this和super关键字来处理对象成员和父类成员。 3. Java API Java提供了大量的标准类库,称为应用程序接口(API),其中java.lang和java.util是两个非常...
在教学目标中提到能够解释类名作为参数和返回值类型,这意味着要理解Java中方法的参数和返回值可以是对象类型,也可以是类类型。这在多态的实现中非常重要,因为多态通常涉及到父类类型作为参数或返回值来引用子类的...
这份"JAVA基础语法PPT教学"涵盖了从入门到进阶的基础知识,包括四个部分,分别是"一"、"二"、"三"和"四"。下面我们将详细探讨这些PPT可能涵盖的关键知识点。 1. **基本概念与环境搭建** - Java的历史和应用领域 -...
4. 学会编写和运行简单的Java应用程序。 5. 了解并能应用数组、枚举类型、运算符、表达式和控制语句等核心概念。 6. 理解并掌握类与对象的概念,以及面向对象设计中的封装、继承和多态。 7. 具备使用Java进行初步...
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语言的核心技术和面向对象编程的原则。这门课程对于计算机科学与技术以及软件工程专业的本科学生...
4. this和super关键字 this关键字用于引用当前对象的属性和方法,避免与局部变量或参数冲突。在子类中,super关键字用于访问父类的属性和方法。例如,当子类和父类中有同名属性时,使用super关键字可以调用父类的...
本教程旨在帮助新手和经验丰富的程序员深入理解和应用Java OOP概念。 首先,我们需要理解OOP的四大基本概念:封装、继承、多态和抽象。 1. 封装:封装是隐藏对象的属性和实现细节,只对外提供公共访问方式。在Java...
### Java求两数之和及自定义异常处理 在Java编程语言中,处理数值运算时经常需要对输入数据的有效性进行验证。本篇文章通过一个具体的示例——计算两个数之和,并确保这两个数都在特定范围内(10到20之间),来介绍...
也会介绍构造函数、this关键字和super关键字的使用。 5. **第4章:数组**:解释一维和多维数组的使用,以及数组操作相关的内置方法,如排序、查找等。 6. **第6章:字符串和字符串处理**:介绍String类的特性和...
6. this和super关键字:在构造方法中,this可以用来引用当前对象,而super可以用来引用父类。使用super()可以调用父类的构造方法,而使用this()可以调用本类的另一个构造方法。 以上知识点详细解释了在Java程序设计...
课程设计理念强调理论与实践一体化,以实践教学为核心,通过实际项目和前沿案例,让学生在实践中学习和理解Java语言,从而提升解决实际问题的能力。教学条件要求使用Windows 10操作系统和IntelliJ IDEA作为开发工具...
《Java 语言程序设计》是一门旨在教授Java编程基础与实战技巧的课程,适用于通识选修课和专业拓展课,旨在让学生理解Java语言特性、面向对象编程思想以及计算机软件和系统工作原理。课程设计注重理论与实践相结合,...