在java中,this和super关键字是与继承关系密切相关的,this和super可以看做是变量;this用来指向当前对象或类的实例变量,super用来指向当前对象的直接父类对象。


1.this关键字的用法

  1.1this关键字用来区分成员变量与局部变量的冲突。

    当方法中的某个局部变量与当前类的某个成员变量具有相同的名字时,为了不混淆,使用this区分。用this引用的是成员变量,没有this的是局部变量。

  示例:

public class Student{private String name;public void setName(String name){this.name = name;  //name代表形参里的name,this.name代表成员变量name}public String getName(int age){this.age = age;}
}

  1.2作为方法的返回值,返回对象本身。

  示例:

public class Test{int i = 0;Test(int i)}{    //构造方法this.i = i;}Test increament(){   //该方法的功能是使i+1,并返回Test本身i++;return this;  //返回当前对象}void print(){System.out.println("i="+i);}public static void main (String args[]){Test test = new Test(10);//每调用一次increament()方法i,就增加1test.increament().increament().print();}
}

  结果是12,两次调用increament()方法。

  1.3this关键字还用于构造方法的重载。

    在类的某个构造方法中使用this([实参列表])来调用本类的其他构造方法,该语句必须放在此构造方法的第一行。

    注:在使用this关键字进行构造方法的重载时需要有一个出口,也就是说至少有一个构造方法没有用this([实参列表])调用其他的构造方法,否则调用是循环调用,会造成死循环。

    如果一个类中有多个构造方法,最好在参数少的构造方法中使用this([实参列表])来调用参数多的构造方法,这样可以增加类的可读性和可维护性。


2.super 关键字的用法

  super代表当前对象的直接父类对象。在类的继承中,可以使用super访问父类中被子类隐藏了的同名成员变量,访问父类中被子类覆盖了的同名成员方法,也可以在子类的构造方法中使用super关键字调用父类的构造方法,以下是super的两种主要用法:

  2.1在子类中访问父类的成员

    引用直接父类中被隐藏的成员变量,语法如下:

      super.成员变量;

    调用直接父类中被覆盖的成员方法,语法如下:

      super.成员方法([实参列表]);

  示例:

//FatherClass
public class FatherClass{String name;int age = 48;public void info(){name = "zhangsan";System.out.println("name---->"+name);}
}//ChildClass
public class ChildClass extends FatherClass{String name;    //对父类中的name属性重新定义,即隐藏了父类中的name属性public void info(){      //对父类中的info()方法进行重写super.info();        //利用super关键字调用被子类覆盖的父类中的info()方法name ="zhangqian";System.out.println("childname---->"+name);System.out.println(name);System.out.println(super.name);}
}//Test
public class TestSuper{public static void main(String[] args){ChildClass child = new ChildClass();child.info();}
}

  2.2调用直接父类的构造方法

    语法如下:

      super([实参列表]);

    注:1.调用直接父类的构造方法经常使用的语句是super()和super(参数)。

      2.super()表示调用父类中没有任何参数的构造方法。

      3.super(参数)表示调用父类中含有参数的构造方法,根据传递的参数类型和个数决定调用哪个构造方法。

      4.super()和super(参数)必须出现在构造方法的第一行,而且是调用父类构造方法的唯一方式。一般通过这种方法在子类的构造方法中初始化父类中的属性。

  示例:

//SuperClass
public class SuperClass{public SuperClass(){    //父类中不含任何参数的构造方法System.out.println("SuperClass Create");}public SuperClass(String s){ //父类中含有一个字符串参数的构造方法System.out.println(s+"SuperClass Create");}
}//ChildClass
public class ChildClass extends SuperClass{public ChildClass(){super();     //调用父类中没有任何参数的构造方法System.out.println("ChildClass Create");}public ChildClass(String s){super(s);      //调用父类中含有一个字符串参数的构造方法System.out.println(s+"ChildClass Create");}public static void main(String[] args){ChildClass cc = new ChildClass();ChildClass fc = new ChildClass("Java, ");}
}

  


转载于:https://www.cnblogs.com/xiaonanman/p/6725204.html

this和super关键字相关推荐

  1. This和Super关键字的对比

    this和Super关键字 this和Super关键字的对比 Super关键字的用法如下: 1. super关键字代表了父类空间的引用: 2. super关键字的作用: 3. super关键字调用父类 ...

  2. Java基础学习总结(8)——super关键字

    2019独角兽企业重金招聘Python工程师标准>>> 一.super关键字 在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们 ...

  3. Java面向对象之继承,方法重写,super关键字,员工类系列继承题

    在程序中,如果想声明一个类继承另一个类,需要使用extends关键字. 格式: class 子类 extends 父类 {} 继承的好处 1.继承的出现提高了代码的复用性,提高软件开发效率. 2.继承 ...

  4. 被final修饰的变量在哪存储_final,static,this,super 关键字总结,一点课堂(多岸学院)...

    final 关键字 final关键字主要用在三个地方:变量.方法.类. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改:如果是引用类型的变量,则在对其初始化之后便 ...

  5. java构造方法 this_Java之构造方法及this、super关键字

    有关构造方法的理解: 需要对对象的数据进行初始化,则创建一个构造方法,此方法名字和类名一样,但是没有返回值(类型和具体的值都没,但是可以写return;).构造方法是用来创建对象的,所以是不能被对象调 ...

  6. Java基础super关键字、final关键字、static关键字、匿名对象整理

    super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...

  7. 【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )

    文章目录 I . 子类调用父类总结 II . 子类调用父类方法 ( super ) III . 子类内部类调用父类方法 ( super@ ) IV . 子类选择调用不同的 父类 / 接口方法 ( su ...

  8. ES6的 super 关键字

    Class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多. 子类必须在constructor方法中调用super方法,否则新建实例时会报错. 这是因为子 ...

  9. java super()方法_Java super关键字的使用方法详解

    构造方法中的super关键字 在Java子类的构造方法中可以通过super关键字来调用父类的构造方法.其用法为: 1) super(); 访问父类中的无参构造函数 2) super (paras-); ...

  10. java继承关键字super_java学习笔记-继承中super关键字

    背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...

最新文章

  1. Retrofit学习笔记
  2. java记事本应用程序_Java教程:使用记事本编写运行Java程序
  3. [课堂实践与项目]NavigationController与TabBarController的综合使用及易错点分析(包含消息提醒,app更新)...
  4. 网络基础知识-TCP/IP协议各层详解
  5. unity 3d物体描边效果_从零开始的卡通渲染描边篇
  6. Establishing SSL connection without server's identity verification is not recommended.
  7. 数据的PB级别是什么?
  8. Spring MVC拦截器~~~登陆验证拦截
  9. Kali安装虚拟机遇到的问题
  10. ie和谷歌在java中空格兼容,谷歌和IE浏览器的兼容性问题,相同的html结构竟然在两个浏览器不一样...
  11. 洛谷 P1313 计算系数 —— 水题
  12. java 静态方法_自学JAVA每日记录(11)-欢迎指点欢迎共勉
  13. 汇编语言 XCHG指令
  14. 论文投递,核心期刊目录(2017版)
  15. window10截取动图(录制视频转gif)
  16. java将图片压缩到指定大小以内并保存图片
  17. 微步在线安全事件分析:全球数亿主机被FireBall攻陷
  18. 关于勾股数的规律及证明
  19. Java开发的医院门诊挂号系统
  20. 并发编程系列之一:锁的意义

热门文章

  1. 高中计算机竞赛教案,信息技术教学案例评比——选择排序的算法实现(金华第一中学)...
  2. Python数据结构与算法(2.2)——顺序表
  3. OpenCV-Python实战(13)——OpenCV与机器学习的碰撞
  4. 什么情况下你的工作最为成功_在不倦怠的情况下开始成功学习
  5. Hibernate Session get()vs load()实例差异
  6. android oreo_Android Oreo隐式和显式广播接收器
  7. Android MVP和Dagger2
  8. ansible之cron模块
  9. C# Winform编程ListBox之DrawItem事件
  10. 关于header('location:url')的一些说明,php缓冲区