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
的追溯不仅限于直接父类。super
和this
的用法相像,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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。