一、this和super
1.this:代表本类的一个对象,谁调用该方法,this就是谁 (eg:实参m—形参m—成员变量this.m)
例如 Student s = new Student();
s.setId(3); 此时this就是s
Student s1 = new Student();
s1.setId(3); 此时this就是s1
2.super:代表了当前对象的父类对象
@Override
public String toString() {
//super:代表了当前对象的父类对象
return super.toString();
}
二、构造方法
构造方法:
1.配合new创建实例(对象) (创建对象时,一次只能用一种构造方法)
2.对实例进行初始化操作(为成员变量赋初始值) (后面值可以改)
形式:(返回值固定,不用定义返回值类型,返回所在的类名,也为了和其它方法区分)
[访问控制符] 类名([参数列表]){
}
特点:
1.类中未定义构造方法时,会有一个默认的无参数的构造方法
2.类中定义了构造方法,不会再提供默认的无参数的构造方法
3.构造方法的方法名必须和所在的类的类名保持一致,所以构造方法不能被重写,但是可以被重载(一个类中可以有多个构造方法)
4.在一个构造方法中,通过this的方式调用其它构造方法,必须写在第一行 (当前构造方法中不能通过this自己调自己)
5.通过this的方式调用构造方法,只能是在构造方法中 (非构造方法中调用构造方法,通过 new 构造方法名() 的方式调用)
6.在子类的构造方法中,我们没有调用父类构造方法时,默认会在第一行调用父类中无参数的构造方法
7.在子类的构造方法中,默认只会去调用父类中无参数的构造方法,
如果父类中没有无参数的构造方法,就需要我们自己手动在第一行调用父类中的某个构造方法
8.构造方法可以被任何访问控制符修饰
(所有的机制保证 先有父,后有子)
this.方法名([参数列表]):调用成员方法
this([实参列表]):调用本类中其它的构造方法
super([实参列表]):调用了父类中的某个构造方法
class SuperClass{
public SuperClass() {
System.out.println("父类无参数的构造方法");
}
public SuperClass(int a) {
System.out.println("父类有参数的构造方法");
}
}
class SubClass extends SuperClass{
public SubClass() {
//super(); (SuperClass未定义构造方法,第一行默认调用父类中的无参构造方法)
super(1); //(SuperClass定义了构造方法,第一行调用父类中的有参构造方法)
System.out.println("子类无参数的构造方法");
}
public SubClass(int x) {
super(10); //(此时SuperClass父类中无无参的构造方法,手动调用有参构造方法)
//this(); //(调用super(10);后,不能再调用自己的构造方法,由于二者都只能在第一行)
}
}