一、this是自身的一个对象,代表对象本身,可以理解为指向对象本身的一个指针
this是用来访问本类实例属性和方法的,它会先从本类中找,如果本类中找不到则在父类中找
-
this属性使用:用来赋值本类属性(最常见的用法),写类时的setter方法
eg:
public void setId(int id) { this.id = id; }
-
this方法使用:可以使用this()( 这个方法指的是this.(构造方法) )方法来调用本类中的构造方法,这个方法和super一样,如果显示的调用,只能放在方法的首行,不然会报错
-
this访问父类方法:
this.父类的方法名
是可以访问到的,也就是说它会先从本类中找,如果本类中找不到则在父类中找
二、super可以理解为指向自己超(父)类的一个指针,而这个超类指的是离自己最近的一个父类
super是用来访问父类实例属性和方法的
-
如果没有显示指定super()方法( 这个方法指的是super.(构造方法) ),那么子类会生成一个隐藏的super()方法,用来调用父类的无参构造方法,每个类在实例化的时候之所以能调用到Object类(是所有类的父类),就是默认super方法起作用了
-
注意:如果要显示使用super()( 这个方法指的是super.(构造方法) )方法,那么super()方法必须放在构造方法的首行,否则编译器会报错。放在首行是为了在实例化子类时才能确保父类已经先被初始化了
-
使用父类方法一定要用super吗?不一定。只有当子类重写了父类的方法时,如果需要用到父类的方法时,才要用super,表明这个方法是父类的方法不是子类的方法。
eg:
super.父类的方法名
-
super还可以调用父类的属性
super.父类的属性名
三、this和super的不同
-
指代的对象不同
super指代的是父类,是用来访问父类的
this指代的是当前类
-
查找范围不同
super只能查找父类
this会先从本类中找,如果找不到则会去父类中找
-
本类属性赋值不同
this可以用来给本类的实例属性赋值
super不可以
-
this可用于synchronized
关于父类子类的继承
子类即使不扩充父类,也能维持父类的操作
Java之中只允许多层继承,不允许多重继承,Java存在单继承局限
如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,就是相当于隐含了一个super()的形式,super调用父类构造时,一定要放在构造方法的首行上
Object
Object类是Java类层次最顶层的基类(父类),所有类都是直接或间接继承自Objec类,因此所有类都可以使用Object中的成员方法
位于java .lang包中,编译时会自动导入
标签:Java,构造方法,super,用法,子类,父类,方法,本类 From: https://www.cnblogs.com/ragworm/p/18496326