您的位置:首页 > 编程语言 > Java开发

java回忆录—this和super的比较

2016-08-04 01:58 435 查看
在JAVA程序中似乎经常见到“this”,自己也偶尔用到它,但是到底“this”该怎么用,却心中无数!很多人一提起它,就说“当前对象”,可到底什么是当前对象,是什么当前对象,他自己也不清楚。

先说下构造函数:

构造方法注意事项

如果你不提供构造方法,系统会给出默认构造方法

如果你提供了构造方法,系统将不再提供

构造方法也是可以重载的


this主要要三种用法:

1、表示对当前对象的引用

2、表示用类的成员变量,而非方法参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。

例子:


public class Test2 {

public static void main(String[] args) {
Student s = new Student(10);
}

}
class Student {
int age;
String name;
public Student(int age) {
this.age = age++;
System.out.println(age+";"+this.age); //参数与成员变量同名,用this区分开
}
}


结果:




3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。

例子:


class Student {
int age;
String name;
public Student(int age) {
this.age = age;
}
public Student(int age,String name) {
this(age); //this调用一个参数的构造函数,且必须放在第一行,只能调用一次
this.name = name;
}
}


但是这里必须非常注意:只能引用一个构造方法且必须位于开始!

还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!

super主要有两种用法:

1)表示当前类的父类的引用

2)调用父类的同名成员变量或者方法(super.成员变量/super.成员方法)

2)显示地调用父类的构造器(super(parameter1,parameter2....)


这里就不多说,跟this的用法类似。

在子类构造函数中不显示调用父类构造函数的话,默认在子类构造函数的第一行调用父类的无参构造函数。

跟this一样要注意的是:如果是用在子类构造器中,则必须是子类构造器的第一个语句。

例子:

public class Test2 {
public static void main(String[] args)  {
new Circle();
}
}

class Draw {

public Draw(String type) {
System.out.println(type+" draw constructor");
}
}

class Shape {
private Draw draw = new Draw("shape");//1

public Shape(){
System.out.println("shape constructor");//2
}
}

class Circle extends Shape {
private Draw draw = new Draw("circle");//3
public Circle() {
System.out.println("circle constructor");//4
}
}


结果:


这例子主要讲类继承时构造器的调用顺序和初始化顺序。

要记住一点:父类的构造器调用以及初始化过程一定在子类的前面。

由于Circle类的父类是Shape类,所以Shape类先进行初始化,然后再执行Shape类的构造器。

接着才是对子类Circle进行初始化,最后执行Circle的构造器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: