1.super
super( )的用法
大白话解释一下super( ) : super( )其实就相当于一个指向基类的指针,(Java中没有指针,但是可以这样理解)。至于用法有一下种形式:
1. super.XXX
普通的直接引用
与 this 类似,super 相当于是指向当前对象的父类,这样就可以用 super.xxx 来引用父类的成员
2. super.XXX( )
这里的XXX是父类中的其中一个方法名
3. super( )
这种形式指的是:调用父类没有参数的构造方法(也叫构造函数)注意: 这里super( ) 只能放在子类的构造方法里面,并且只能放在构造方法的首句
4. super( x,y,z…)
此形式指:调用父类有参数的构造方法,也必须放在子类的构造方法(成员方法不可以)里面,并且只能放在构造方法的首句。其中x,y,z是指的与父类此有参构造方法中参数数据类型相对应的子类中的参数
正确做法
2、this
(1)this代表当前对象的一个引用。所谓当前对象,指的是调用类中方法或属性的那个对象(全局变量)
最经常使用this关键字的情况,是在对象的一个属性被方法或构造器的参数屏蔽时,需要调用这个被屏蔽的属性,如下:
class Person {
private String name;
private int age;
public Person(String name, int age) {
// 局部变量name,age把Person类的属性屏蔽
this.name = name;
this.age = age;
}
}
(2)this只能在方法内部使用,表示对“调用方法的那个对象”的引用。但要注意,如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。当前方法中的this引用会自动应用于同一类中的其他方法。
如下:
public class Apricot {
void pick() {}
void pit() {
pick();
}
}
在pit()内部,你可以写this.pick(),但无此必要。编译器能帮你自动添加。只有当需要明确指出对当前对象的引用时,才需要使用this关键字。
注:有些人执意将this放在每一个方法调用和字段引用前,认为这样“更清楚更明确”。但是造成别这样做。我们使用高级语言的原因之一就是它们能帮我们做一些事情。要是你把this放在一些没必要的地方,就会使读你程序的人不知所措,因为别人写的代码不会到处用到this。人们期望只在必要处使用this。遵循一种一致而直观的编程风格能节省时间和金钱。
(3)this不能用于静态方法。main方法也是静态的,所以this也不能用于main方法。
Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成,而this指代的是当前的对象。
在方法中定义使用的this关键字,它的值是当前对象的引用。也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况.。
而且,更为重要的是this和super都无法出现在static 修饰的方法中,static 修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象。如果使用的是类来调用而不是对象,则this就无法指向合适的对象。所以static 修饰的方法中不能使用this。