`
jgnan
  • 浏览: 87491 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

每天简单JAVA教学:super和this

阅读更多
因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。。。

今天抓紧时间给大家说说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的循环写法
  • 大小: 13.4 KB
分享到:
评论

相关推荐

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    10.3.7 使用super调用父类中的方法和属性 278 10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 ...

    超详细Java入门到精通自学视频课程-10、继承:构造器特点、this、super小结.rar

    Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式...本视频教程帮助你从新手小白到成为精通JAVA的高手,从软件的安装,功能的介绍和使用,实战演习讲解等各大维度进行详细的教学.

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    10.3.7 使用super调用父类中的方法和属性 278 10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 ...

    《Java程序设计案例教程》教学课件05深入Java面向对象.pptx

    模块5 深入Java面向对象 《Java程序设计案例教程》教学课件05深入Java面向对象全文共47页,当前为第1页。 学习目标 01 了解Java面向对象程序设计的思想原则。 02 掌握类的结构、定义及对象的创建和使用。 03 掌握...

    AIC的Java课程1-6章

    第5 版 清华大学出版社  “SCJP学习指南” 人民邮电出版社  “Java 编程思想” 第3版 机械工业出版社  教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 ...

    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范例开发大全

    第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...

    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 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。  《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是...

    跟我学Java面向对象程序设计技术及应用——Java-Swing-GUI组件技术教学参考示例(第2部分).pdf

    杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究, 1/16 页 1.1 Java Swing GUI 组件技术教学参考示例(第 2 部分) 1.1.1 Swing ToolBar 组件的应用实例 1、窗口内的...

    java范例开发大全(pdf&源码)

    第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...

    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...

    实验10-Android数据存储和IO.doc

    实验报告封面 课程名称: Android平台开发与应用 课程代码: SM3004 任课老师: 梁郁君 实验指导老师: 梁郁君 实验报告名称:实验10 Android数据存储与IO 学生姓名: 学号: 教学班: 递交日期: 签收人: 我申明,...

Global site tag (gtag.js) - Google Analytics