this和super

编程入门 行业动态 更新时间:2024-10-18 16:53:28

this和<a href=https://www.elefans.com/category/jswz/34/1770128.html style=super"/>

this和super

文章目录

  • this
    • 用法
      • 普通的直接引用
      • 区分形参与实参
  • super
    • 用法
      • 普通的直接引用
      • 区分子类与父类同名的属性或方法
  • this和super 与 构造方法
  • 总结

this

this引用表示当前对象对象的引用。

用法

普通的直接引用

public class Test {int a ;int b;public Test() {this.b = 0;}
}

调用当前类的成员变量

区分形参与实参

class Student {private String name = "用户为指定";public Student() {System.out.println("姓名:" + name);}public void setName(String name) {this.name = name;}public String getName() {return this.name;}
}public class test1 {public static void main(String[] args) {Student Stu = new Student();Stu.setName("张三");System.out.println("Stu's name is " + Stu.getName());}
}     

运行结果:

姓名:用户为指定
Stu's name is 张三

name是构造方法的形参,this.name 是成员遍历

super

super可以理解为是指向自己父类对象的一个引用。

用法

普通的直接引用

class A {int a;public A(int a) {this.a = a;}
}
class B extends  A {int b ;public B(int a,int b) {super(a);this.b = b;}
}public class Test {public static void main(String[] args) {B Ob = new B(1,2);System.out.println(Ob.a + " " + Ob.b);}
}

运行结果:

1 2

区分子类与父类同名的属性或方法

class Parent {String name;void name() {name = "Dad";}
}class Son extends Parent {String name;// 重写父类的方法@Overridevoid name() {name = "Son";super.name(); //调用父类的方法System.out.println(name);System.out.println(super.name);}public static void main(String[] args) {Son c = new Son();c.name();}
}

运行结果:

Son
Dad

既调用了父类的方法,也调用了父类的变量。若不调用父类方法name(),只调用父类变量name的话,则父类name值为默认值null。

this和super 与 构造方法

super() 调用父类中的某一个构造函数(应该为构造函数中的第一条语句)
this() 调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)
this() 和 super() 在一个构造方法中不能同时存在

class Person {public static void prt(String s) {System.out.println(s);}Person() {prt("父类·无参数构造方法: " + "A Person.");}//构造方法(1) Person(String name) {prt("父类·含一个参数的构造方法: " + "A person's name is " + name);}//构造方法(2) 
}public class Chinese extends Person {Chinese() {super(); // 调用父类构造方法(1) prt("子类·调用父类”无参数构造方法“: " + "A chinese coder.");}Chinese(String name) {super(name);// 调用父类具有相同形参的构造方法(2) prt("子类·调用父类”含一个参数的构造方法“: " + "his name is " + name);}Chinese(String name, int age) {this(name);// 调用具有相同形参的构造方法(3) prt("子类:调用子类具有相同形参的构造方法:his age is " + age);}public static void main(String[] args) {Chinese cn = new Chinese();cn = new Chinese("codersai");cn = new Chinese("codersai", 18);}
}

运行结果:

父类·无参数构造方法: A Person.
子类·调用父类”无参数构造方法“: A chinese coder.
父类·含一个参数的构造方法: A person's name is codersai
子类·调用父类”含一个参数的构造方法“: his name is codersai
父类·含一个参数的构造方法: A person's name is codersai
子类·调用父类”含一个参数的构造方法“: his name is codersai
子类:调用子类具有相同形参的构造方法:his age is 18

总结

this在不产生二义性的情况下,既可以调用父类的属性和方法,又可以调用子类的属性和方法。而super只能调用从父类继承下来的非静态属性和方法。

【相同点】

  1. 都是Java中的关键字
  2. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段
  3. 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在

【不同点】

  1. this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用
  2. 在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性
  3. 在构造方法中:this(…)用于调用本类构造方法,super(…)用于调用父类构造方法,两种调用不能同时在构造方法中出现
  4. 构造方法中一定会存在super(…)的调用,用户没有写编译器也会增加,但是this(…)用户不写则没有

更多推荐

this和super

本文发布于:2023-11-15 11:38:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1598955.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:super

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!