在学习this和super关键字时,发现它们有诸多相同点,同时这两个关键字非常常用,现对它们做以下的总结。

一、概况

This:

This指代当前对象,this()指代当前对象的其他构造函数

Super:

Super指代父类对象,super()指代父类的构造函数;

二、具体用法,对比super和this理解

1、this用作指代当前对象,super指代父类对象

A、this.成员变量,可调用当前对象的成员变量,一般是在当前类的某个方法的形参和当前的对象成员变量同名的时候用到

super.成员变量,调用父类的成员变量。

请观察以下代码,顺便讨论下继承的问题。

 public class BokeCode{
  public static void main(String [] args){
  //另外,顺便观察下其他继承的特性
    Bmw bmw1 = new Bmw(30);
    System.out.println(bmw1.size);//输出的是子类的size
6     Car bmw2 = new Bmw();
    System.out.println(bmw2.size);//输出的是父类的size
  }
} class Car{
  int size;
  public Car(int size){
    his.size = size;
    System.out.println("我是Car的构造方法");
  }
} class Bmw extends Car{
  /*
  *重新定义size(其实意义不大,因为父类也有一个size了,成员变量不可以重载
  *其实他们就是两个毫无关系的变量而已,只是名字一样
  */
24   int size;
  public Bmw(int size){
    //调用父类构造方法
    super(20);
    System.out.println("我是父类对象的size " + super.size);//输出父类变量,值是20
    /初始化子类的size
    this.size = size;
31     System.out.println("我是子类对象的size " + this.size);//输出子类变量,值是30
    System.out.println("我是初始化子类对象之后的父类对象的size " + super.size);//父类的size不受影响,输出还是20   }
}

B、this可以指代当前对象的方法,调用方法时可以用this.menthod();当然,在没有混淆的情况下,一般无需如此;当this后跟参数的时候,代指当前对象的对应相同参数的其他构造方法

Super.menthod()类似,指代调用父类的方法;当super后跟参数时,指代对应父类中有相同参数的构造方法。

二、使用注意事项

1、this和super在用于构造函数中(一般this和super后面跟参数是用于构造函数中调用其他构造函数)时,只能是构造函数的第一条语句,因为子类本身就继承了父类的所有方法还有属性,只有在父类对象被构造出来后再执行子类的构造方法的其他语句才是合理得,而this为什么也必须写在第一条语句中,是因为可以通过this调用其他构造方法,而其他构造方法有可能会有以super()的形式调用父类构造方法。

2、在子类中重载父类构造方法的时候,如果父类的构造方法时无参数的,可以不必写出supe();有参数是必须写出的;

调用本对象的属性方法时,可以以this.属性,this.方法来调用,但是一般不画蛇添足。

接着上面例子,补充几条下语句

class Car{
int size;
public Car(int size){
this.size = size;
System.out.println("我是Car的构造方法");
}
public void drive(){
System.out.println("我是方法drive()");
}
} class Bmw extends Car{
/*
*重新定义size(其实意义不大,因为父类也有一个size了,成员变量不可以重载
*其实他们就是两个毫无关系的变量而已,只是名字一样
*/
int size;
public Bmw(int size){
//调用父类构造方法
super(20);
System.out.println("我是父类对象的size " + super.size);//输出父类变量,值是20
//初始化子类的size
this.size = size;
System.out.println("我是子类对象的size " + this.size);//输出子类变量,值是30
System.out.println("我是初始化子类对象之后的父类对象的size " + super.size);//父类的size不受影响,输出还是20 }
public void drive_fast(){
super.driver(); //调用父类方法
System.out.println("我是方法drive_fast()");
}
public void method_test(){
this.driver_fast();//调用之类方法,但一般省略this
} }

this和super用法的总结的更多相关文章

  1. this和super用法

    1. this能分清混淆,形参名与当前对象的某个成员有相同的名字,需要明确使用this关键字来指明你要使用某个成员,使用方法是“this.成员名”. 一般以this.形参数名=形参名,代表送进来赋值的 ...

  2. JAVA中this和super用法

    参考网上资料和自行理解总结java中this和super中各自用法及其差异 <一>. this的用法 构造方法是创建java对象的重要途径,通过new关键字调用构造器时,构造器返回该类的对 ...

  3. Python中的super()用法

    Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this,比如:C#),用于传递对象本身,而在调用的时候则不 必显式传递,系统会自动传递. 今天我们介绍的主角是su ...

  4. Java中this、super用法

     这节我们主要是区分this 和 super这两个关键字的用法 起初我根本弄不清楚this 和 super这两个关键字的用法,也不明白在代码实例中为什么既用this又用super,下面就是原因: 1. ...

  5. Java—static、this、super用法总结

        通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.(理解为加了static的就是全局变量)但是,并不是说有了这种便利,你便可 ...

  6. Pythn中的super用法

    在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: 代码如下: class A: def __init__(self): p ...

  7. 关于Python的super用法研究

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在python 2.2以前,通常的写法如代码段1: 代码段1: class A:  def __init__(se ...

  8. this和super用法详解

    这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this ...

  9. Python面向对象中super用法与MRO机制

    1. 引言 最近在研究django rest_framework的源码,老是遇到super,搞得一团蒙,多番查看各路大神博客,总算明白了一点,今天做一点总结. 2. 为什么要用super 1)让代码维 ...

随机推荐

  1. golang--gopher北京大会(1)

    大会感想:牛人真的很能写代码,实现很多功能,而且开源的精品越多,影响力越大,越能过上dream life.比如beego的作者,去了America,进入了Apple.另外,精英们特点是表达能力很强,也 ...

  2. java生成base64编码的png

    java代码: 引用包: import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java. ...

  3. document.referrer 特性

    最近需要用到document.referrer,但是在测试的时候,总是获取为空,百思不得其解. 于是发动百度,看了大量的文章没有一个说到点子上是为什么,后来偶然看到document.referrer ...

  4. M1事后分析汇报总结

    学霸网站项目Postmortem结果 设想和目标 1.       我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 学霸网站为计算机学习提供了一个网上基地,在这里你 ...

  5. ARP协议

    ARP协议就是一个获取对方MAC地址的协议,ARP协议它是一个网络层的协议,它的作用是通过ARP request报文来获得对方的MAC地址,ARP报文里面发送的内容大概是192.168.1.20你的M ...

  6. Find Minimum in Rotated Sorted Array II leetcode

    题目链接 这个博客的算法思想简单好! 还是贴上自己的蹩脚代码吧!! class Solution { public: int findMin(vector<int>& nums) ...

  7. Python 迭代dict 效率

    迭代dict也要讲求效率,不然就要走进性能陷阱 以下三种迭代方式:keys,iterkeys, hashkey import timeit DICT_SIZE = 100 * 100000 testD ...

  8. stringbuffer与stringbuilder与String

    1. 在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们 ...

  9. day5----模块

    1.定义     模块:用来从逻辑上组织python代码(变量,函数,类,运行逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)     包: ...

  10. 安装Tomcat服务器

    一.首先,下载Tomcat,你可以直接百度Tomcat官网, 或者,直接在地址栏输入他的官网地址:http://tomcat.apache.org/,然后进入他的主页,在主页左侧可以找到Downloa ...