this和super用法的总结
在学习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用法的总结的更多相关文章
- this和super用法
1. this能分清混淆,形参名与当前对象的某个成员有相同的名字,需要明确使用this关键字来指明你要使用某个成员,使用方法是“this.成员名”. 一般以this.形参数名=形参名,代表送进来赋值的 ...
- JAVA中this和super用法
参考网上资料和自行理解总结java中this和super中各自用法及其差异 <一>. this的用法 构造方法是创建java对象的重要途径,通过new关键字调用构造器时,构造器返回该类的对 ...
- Python中的super()用法
Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this,比如:C#),用于传递对象本身,而在调用的时候则不 必显式传递,系统会自动传递. 今天我们介绍的主角是su ...
- Java中this、super用法
这节我们主要是区分this 和 super这两个关键字的用法 起初我根本弄不清楚this 和 super这两个关键字的用法,也不明白在代码实例中为什么既用this又用super,下面就是原因: 1. ...
- Java—static、this、super用法总结
通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.(理解为加了static的就是全局变量)但是,并不是说有了这种便利,你便可 ...
- Pythn中的super用法
在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: 代码如下: class A: def __init__(self): p ...
- 关于Python的super用法研究
一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(se ...
- this和super用法详解
这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this ...
- Python面向对象中super用法与MRO机制
1. 引言 最近在研究django rest_framework的源码,老是遇到super,搞得一团蒙,多番查看各路大神博客,总算明白了一点,今天做一点总结. 2. 为什么要用super 1)让代码维 ...
随机推荐
- linux--分卷压缩解压缩
1.先压缩目录为一个文件 root@ip# tar zcvf apk.tar apk/ 2.对文件进行切分,-d表示切分后的文件后缀已数字区分(如apk_2015.tar01,apk_2015.tar ...
- Java写操作
//:ThinkingInJava/net.mindview.io/write2File.java package net.mindview.io; import java.io.BufferedRe ...
- canvas事件
canvas的事件只能监听在canvas标签上,而不嗯那个想其他dom元素那样,所以针对canvas里面的图形监听事件是比较麻烦的. 通过isPointInPath(x,y); 这个方法用于判断某一 ...
- Centos6.X下安装php nginx mysql 环境
---------------------------------------更换163软件源,此步可以省略,记得把repo文件里面的6.5改成当前版本号 yum makecache &&am ...
- discuz学习,文件列表
文件颜色说明: 红色:程序核心文件,修改这类文件时千万要注意安全! 橙色:做插件几乎不会用到的文件,大概了解功能就可以了,其实我也不推荐修改这些文件 绿色:函数类文件,许多功能强大的自定义函数可以调用 ...
- Xcode升级更新后,恢复cocoapods以及插件的方法
今天将手机系统更新到iOS9.3了,在Xcode7.1上做真机调试,提示找不到适合的SDK,才知道必须要升级Xcode才行,于是升级Xcode到7.3. 升级之后遇到很多麻烦,cocoapods没有了 ...
- lvs DR模式
1.单机 director端ifconfig eth0:1 $vip broadcast $vip netmask 255.255.255.255 up ----broadcast广播(单机的时候加这 ...
- java图形化编程
转载 学习Java Swing图形化编程,我们首先要了解三个最基本的概念:顶层容器,控件,布局. 下面就来介绍一下这三个基本概念 1.顶层容器 什么是顶层容器?当我们使用Java进行图形编程的时候,图 ...
- MySQL数据库小实验
实验1 1.创建数据表 CREATE TABLE guest( Accounts ) NOT NULL, Details ) NOT NULL, Date ) NOT NULL, ,), Class ...
- wiredtiger - hazard pointers
http://www.drdobbs.com/lock-free-data-structures-with-hazard-po/184401890 memory deallocation lock- ...