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 ps命令详解与示例说明
ps:要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结 ...
- 使用 xlrd 模块实现对excel 的读取、excel转json 、excel 转 mysql insert 语句
#-*- coding:utf-8 -*- # 处理 excel 中的 area 为 Mysql insert 语句 import xlrd, json, codecs, os # data = xl ...
- 自定义安装php开发环境(1)--apache和php整合
第一步:安装apache 第二步:下载php核心包php-5.3.3-Win32-VC6-x86.zip.并放入开发环境文件夹C:/phpenv/文件夹下 第三步: 将apache 和php 整合 也 ...
- Sql 常见面试题
SQL面试题(1) create table testtable1(id int IDENTITY,department varchar(12) ) select * from testtable1i ...
- shell 脚本注意事项
设脚本名为test.sh 第一行应该为#! /bin/bash 1.运行和调试的结果是不一样的 调试 sh -x test.sh 这时在计算两个数的和sum=$[$a+$b]时得到sum=3+4,而 ...
- SDAutoLayout:比masonry更简单易用的自动布局库
SDAutoLayout:一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于做最简单易用的AutoLayout库. [SDAutoLa ...
- C# 基础(5)--字符串
Params 可变参数,只能修饰数组,可以传递数组,也可以传递数组的元素. 要抛弃一个异常,可以这样写: Throe new exeception?? 命名空间 不在同一个命名空间下的类,不同直接访问 ...
- 何为“精通Java”
何为精通Java?本来Java仅仅是一门语言,但从应用技术的角度来看,精通Java是可以无边无际的.很可能你可以对James说:我精通J2EE.JVM.Java服务器.大数据等等一些和Java相关的应 ...
- 5、清理mac缓存和关闭后台运行程序
一.清理mac 缓存 1.用鼠标点击桌面,然后按快捷键Command+Shift+G前往文件夹 2.输入路径:~/Library/Caches/ 3.清除所有的数据,把所有的Caches文件夹得都行 ...
- 无向图最小生成树(prim算法)
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小.该算法于1930年由捷 ...