通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量。但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自己是否在用面向对象的思想编程,自己的程序是否是面向对象的。

好了,现在开始讨论this&super这两个关键字的意义和用法。

在Java中,this通常指当前对象,super则指父类的。当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个构造函数,这些马上就要讨论。如果你想引用父类的某种东西,则非super莫属。由于this与super有如此相似的一些特性和与生俱来的某种关系,所以我们在这一块儿来讨论,希望能帮助你区分和掌握它们两个。

在一般方法中

最普遍的情况就是,在你的方法中的某个形参名与当前对象的某个成员有相同的名字,这时为了不至于混淆,你便需要明确使用this关键字来指明你要使用某个成员,使用方法是“this.成员名”,而不带this的那个便是形参。另外,还可以用“this.方法名”来引用当前对象的某个方法,但这时this就不是必须的了,你可以直接用方法名来访问那个方法,编译器会知道你要调用的是那一个。下面的代码演示了上面的用法:

public class DemoThis{

private String name;

private int age;

DemoThis(String name,int age){

setName(name);

//你可以加上this来调用方法,像这样:this.setName(name);但这并不是必须的

setAge(age);

this.print(); }

public void setName(String name){

this.name=name;//此处必须指明你要引用成员变量

}

public void etAge(int age){

this.age=age;

}

public void print(){

System.out.println("Name="+name+" ge="+age);

//在此行中并不需要用this,因为没有会导致混淆的东西

}

public static void main(String[] args){

DemoThis dt=new DemoThis("Kevin","22");

这段代码很简单,不用解释你也应该能看明白。在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。下面我们修改这个程序,来演示super的用法。

class Person{

public int c;

private String name;

private int age;

protected void setName(String name){

this.name=name;

}

protected void setAge(int age){

this.age=age;

}

protected void print(){

System.out.println("Name="+name+" Age="+age);

}

}

public class DemoSuper extends Person{

public void print(){

System.out.println("DemoSuper:");

super.print();

}

public static void main(String[] args){

DemoSuper ds=new DemoSuper();

ds.setName("kevin");

ds.setAge(22);

ds.print();

}

}

在DemoSuper中,重新定义的print方法覆写了父类的print方法,它首先做一些自己的事情,然后调用父类的那个被覆写了的方法。输出结果说明了这一点:

DemoSuper:

Name=kevin Age=22

这样的使用方法是比较常用的。另外如果父类的成员可以被子类访问,那你可以像使用this一样使用它,用“super.父类中的成员名”的方式,但常常你并不是这样来访问父类中的成员名的。

在构造函数中构造函数是一种特殊的方法,在对象初始化的时候自动调用。在构造函数中,this和super也有上面说的种种使用方式,并且它还有特殊的地方,请看下面的例子:

在这段程序中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟

上适当的参数,因此它的意义也就有了变化。super后加参数的是用来调用父类中具有相同形式的

构造函数,如1和2处。this后加参数则调用的是当前具有相同参数的构造函数,如3处。当然,在

Chinese的各个重载构造函数中,this和super在一般方法中的各种用法也仍可使用,比如4处,你

可以将它替换为“this.prt”(因为它继承了父类中的那个方法)或者是“super.prt”(因为它

是父类中的方法且可被子类访问),它照样可以正确运行。但这样似乎就有点画蛇添足的味道

了。

最后,写了这么多,如果你能对“this通常指代当前对象,super通常指代父类”这句话牢记在

心,那么本篇便达到了目的,其它的你自会在以后的编程实践当中慢慢体会、掌握。另外关于本

篇中提到的继承,请参阅相关Java教程

this super java_java中 this 和super的用法相关推荐

  1. JAVA中this和super用法

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

  2. 【Java】泛型中 extends 和 super 的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  3. java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理

    知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=5028 B 站:业余草 最近一个粉丝加我说,接到了阿里的面试,问问我阿里会面 ...

  4. Java中this与super的区别

    2019独角兽企业重金招聘Python工程师标准>>> this与super关键字在java中构造函数中的应用:  ** super()函数 **  super()函数在子类构造函数 ...

  5. Object-C中self和super的区别

    self与super的区别 原文CSDN evilotus 有所整理 **** 在ObjC中的类实现中经常看到这两个关键字"self"和"super",以以前o ...

  6. 转 Android中this、super的区别

    在Java中,this通常指当前对象,super则指父类的.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目 的,当然,this的另一个用 ...

  7. 什么时候在子类构造方法中必须调用super构造方法?

    原则:当父类仅有带有参数的构造方法时,子类的构造方法中必须使用super(参数) super()表示父类的构造方法,子类默认调用父类无参构造方法. 一旦父类仅定义了带参数的构造方法,表示创建父类必须使 ...

  8. react中constructor( )和super( )详解

    前言 如果大家经常使用 react() 做项目,像constructor( )与super( )肯定是司空见惯了,哪哪都有,但是很多人都是复制粘贴一把梭,并不知道这是干啥的与底层原理. 实际上这不是 ...

  9. Java中this和super的对比

    使用super的注意事项 super调用父类的构造方法,必须写在构造方法中第一个 super只能出现在子类的方法中 super和this不能同时使用构造方法,因为这两个都要求必须写在构造方法中第一个 ...

最新文章

  1. Nagios 安装配置
  2. 文件处理-写模式操作文件
  3. 虚拟主机的实现方式,真是简单啊!
  4. # 删除注册表项键值_强制删除:让你的电脑上不再有“顽固”程序
  5. 两种类型的Spark RDD task解析以及iterator解析 -- (视频笔记)
  6. ubuntu14.04安装git
  7. WCF入门(七)——异常处理1
  8. 常用电阻阻值表怎么定的?
  9. Webpack中 CDN加速
  10. 产品新创意,创意产品原型大公开,原来可以这样做!
  11. Java学习笔记 (二十七) 使用NIO写文件
  12. Stderr: VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX) VBoxM
  13. 路由汇总带来的三层环路-解决实验
  14. Microsoft Virtual WiFi Miniport Adapter 使用方法
  15. Java 访问 HDFS操作
  16. Oracle基础包之DBMS_RLS(八)
  17. 2020年复旦大学计算机学院夏令营经历
  18. 如何才能成为数字IC后端ECO专家?
  19. Microsoft Edge 浏览器设置默认起始页
  20. C 语言实例 - 输入n个整数,使其从大到小输出

热门文章

  1. Database specific hint in One order search
  2. PCM - partner channel management的数据库表
  3. 如何得到当前application server的host name和port number
  4. An RFC destination could not be specified for the logical system QI3CLNT504
  5. SAP ABAP实用技巧介绍系列之 在xslt里call ABAP method
  6. all controls within the same view will share the same data Model
  7. SAP S/4HANA生产订单创建时使用的工厂数据是从什么地方带出来的 1
  8. SAP S/4HANA CDS View的访问控制实现:DCL介绍 1
  9. SAP CRM, C4C和Hybris的后台作业
  10. apex 查询_加速器关联好司机下载器下载的apex