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)让代码维 ...
随机推荐
- 比较两个Long对象值
比较两个Long对象的值是否相等,不可以使用双等号进行比较,(long int Integer可以用双等号进行比较)可以采用如下方式: 1.使用equals方法进行比较 Long a=new Long ...
- flash项目优化总结
swc中的类如果没有在项目中没有被申明,在编译时就不会被编译进swf中,这样一些swc中的类和资源类如果不用了,只要不被声明就不会占用swf大小了.
- iOS大神牛人的博客集合
王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒. http://onevca ...
- C# 编程指南-事件
来自微软官方的msdn: 首页:https://msdn.microsoft.com/zh-cn/library/ms366768.aspx 1.如何:订阅和取消订阅事件 2.如何:发布符 ...
- asp.net 去掉重复的querystring
string[] vs = HttpContext.Current.Request.QueryString.GetValues(key); if (vs.Leng ...
- XML文件操作(C#)
XML应用于Web开发的许多方面,常用于简化数据的存储和共享,它的设计宗旨是传输数据,而非显示数据.下面简单介绍一下C#是如何对XML文件进行读取的. 1.首先,建立XML对象并关联XML文件 str ...
- Ubuntu 12.04(32位)安装Oracle 11g(32位)
安装过程(主要过程就直接copy别人的教程了)及问题: 1.将系统更新到最新: sudo apt-get updatesudo apt-get dist-upgrade 2. 如果使用的Ubuntu不 ...
- 读取iOS通讯录
首先导入头文件 #import <AddressBook/AddressBook.h> 获取权限 读取通讯录 - (void)loadPerson { ABAddressBookRef a ...
- sublime text 也能矩形选择
原来用editplus,但发现sublime text后便果断选择这个,她真的是很完美,但有一点就是不能像editplus一样矩形选择(Ctrl+鼠标左键这我知道,但感觉很麻烦)而感到小小的不爽... ...
- 不用开发者账号打ipa包
编译一下 , if -> Build Success -> Show in Finder之后,将文件夹里的app直接拖入到iTunes里, 接着再iTunes里选中app -> S ...