java关键字this和super,java中this和super的作用_1

  java关键字this和super,java中this和super的作用

  00-1010一、此关键字的使用1。概述2。功能3。使用3.1修改属性,使用方法3.2调用构造函数3.3返回当前对象2。超级关键字1的使用。概述2。使用3。使用3.1调用属性,方法3.2调用构造函数3。这个和超4的区别。实例化子类的整个过程。

  

目录

 

  

一、this 关键字的使用

这是这个?

 

  在Java中,这个关键字很难理解,它的功能和它的意思很接近,意思是“当前”。

  

1. 概述

这个关键字可以用来修改、调用:属性、方法、构造函数。该关键字只能在方法内部使用。在方法内部使用,也就是对这个方法所属对象的引用;它用在构造函数内部,指示构造函数正在初始化的对象。

 

  

2. 作用

什么时候用这个关键词?

 

  当方法中需要调用方法的对象时,会使用这种方法。Specific:我们可以用这个来区分属性和局部变量。例如:this.name=name

  

3. 使用

这可以理解为:当前对象或当前正在创建的对象在类的方法中。我们可以利用这个。财产或者这个。方法调用当前对象属性或方法。但是,通常,我们都选择省略这一点。在特殊情况下,如果一个方法的参数和一个类的属性同名,我们必须显式地使用这个。变量来指示此变量是一个属性,而不是一个参数。当使用它访问属性和方法时,如果在这个类中找不到它,将在父类中找到它。代码演示:

 

  类Person{ //定义Person类私有字符串名称;私人年龄;public Person(String name,int age){ this . name=name;this.age=年龄;} public void getinfo(){ system . out . println( name: name );this . speak();} public void speak(){ system . out . println(" age:" this . age ");} }

  

3.1 修饰属性和方法

在一个类的构造函数中,我们可以使用这个。财产或者这个。方法来调用当前正在创建的对象属性或方法。但是,通常,我们都选择省略这一点。在特殊情况下,如果构造函数的参数与类的属性同名,我们必须显式使用这个。变量来指示此变量是一个属性,而不是一个参数。在我们类的构造函数中,我们可以显式地使用this(参数列表)来调用这个类中指定的其他构造函数。构造函数不能通过此(参数列表)调用自己的构造函数。如果一个类中有n个构造函数,这个(参数列表)最多用在n-1个构造函数中:这个(参数列表)必须在当前构造函数的第一行声明。在一个构造函数内,最多只能声明一个this(参数列表),可以用来调用其他构造函数。编译器禁止在除构造函数之外的任何其他方法中调用构造函数。代码演示:

 

  类Person{ //定义Person类私有字符串名称;私人年龄;Public Person(){ //无参数构造函数System.out.println(新对象实例化);} public Person(字符串名){ this();//调用该类中的无参数构造函数this.name=name} public Person(String name,int age){ this(name);//用一个参数调用构造函数this.age=age}公共

   String getInfo(){ return "姓名:" + name + ",年龄:" + age ; } }

 

  

3.3 返回当前对象

代码演示:

 

  

public class Leaf { int i = 0; Leaf increment(){ i++; return this; } void print(){ System.out.println("i = "+i); } public static void main(String args[]){ Leaf x = new Leaf(); x.increment().increment().increment().print();//i = 3 }}

 

  

二、super关键字的使用

1. 概述/h3>(1)super理解为:父类的

 

  (2)在Java类中使用super来调用父类中的指定操作:

  super可用于访问父类中定义的属性。super可用于调用父类中定义的成员方法。super可用于在子类构造器中调用父类的构造器。尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员,super的追溯不仅限于直接父类。superthis的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识。

 

  

2. 使用

可以在子类中显示地调用父类的结构。

 

  

3. 使用

 

  

3.1 调用属性和方法

我们可以在子类的方法或构造器中。通过使用"super.属性super.方法的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我们习惯省略super."。当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用"super.属性"的方式,表明调用的是父类中声明的属性。当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的使用"super.方法"的方式,表明调用的是父类中被重写的方法。

3.2 调用构造器

(1)子类中所有的构造器默认都会访问父类中空参数的构造器。

 

  (2)当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语句指定调用本类或者父类中相应的构造器,否则编译出错。同时,只能二选一,不能同时出现,且必须放在构造器的首行。

  (3)在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)",调用父类中的构造器。

  代码演示:

  

public class Person { private String name; private int age; private Date birthDate; public Person(String name, int age, Date d) { this.name = name; this.age = age; this.birthDate = d; } public Person(String name, int age) { this(name, age, null); } public Person(String name, Date d) { this(name, 30, d); } public Person(String name) { this(name, 30); } }public class Student extends Person { private String school; public Student(String name, int age, String s) { super(name, age); school = s; } public Student(String name, String s) { super(name); school = s; }// 编译出错: no super(),系统将调用父类无参数的构造器。 public Student(String s) { school = s; } }

 

  

三、this和super的区别

No.区别点thissuper1访问属性访问本类中的属性,如果本类没有此属性则从父类中继续查找直接访问父类中的属性2调用方法访问本类中的方法,如果本类没有此方法则从父类中继续查找直接访问父类中的方法3调用构造器调用本类构造器,必须放在构造器的首行调用父类构造器,必须放在子类构造器的首行

 

  

四、子类对象实例化的全过程

(1)从结果上来看:(继承性)

 

  子类继承父类以后,就获取了父类中声明的属性或方法。创建子类的对象,在堆空间中,就会加载所有父类中声明的属性。(2)从过程上来看:

  当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,…直到调用了java.lang.Object类中空参的构造器为止。正因为加载过所有的父类的结构,所以才可以看到内存中有父类中的结构,子类对象才可以考虑进行调用。

  (3)明确:虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即为new的子类对象。

  到此这篇关于Java关键字this与super详解的文章就介绍到这了,更多相关Javathis内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: