在java中this表示当前类中的对象,super则表示父类中的对象。比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个构造方法,如果你想引用父类的某种东西,则选super。
class Person { public static void prt(String s) { System.out.println(s); } //父类构造函数1 Person() { prt("A Person."); } //父类构造函数2 Person(String name) { prt("A person name is:" + name); } } public class Chinese extends Person { Chinese() { super(); // 1.调用父类构造函数(1) prt("A chinese.");// (4) } Chinese(String name) { super(name);// 2.调用父类具有相同形参的构造函数(2) prt("his name is:" + name); } Chinese(String name, int age) { this(name);// 3.调用当前类带形式参数的构造函数Chinese(String name) prt("his age is:" + age); } public static void main(String[] args) { Chinese cn = new Chinese(); cn = new Chinese("kevin"); cn = new Chinese("kevin", 22); } }
在这段程序中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟
上适当的参数,因此它的意义也就有了变化。super后加参数的是用来调用父类中具有相同形式的
构造函数,如1和2处。this后加参数则调用的是当前具有相同参数的构造函数,如3处。当然,在
Chinese的各个重载构造函数中,this和super在一般方法中的各种用法也仍可使用,比如4处,你
可以将它替换为“this.prt”(因为它继承了父类中的那个方法)或者是“super.prt”(因为它
是父类中的方法且可被子类访问),它照样可以正确运行。但这样似乎就有点画蛇添足的味道
了。
一句话------this通常指代当前对象,super通常指代父类