super和this的使用实质必须建立在对象实例已经生成的基础上,
而静态变量不需要类实例就能使用。
例如:
1.public class T1 extends T{
int m = 10;
public static void main(String[] args){
T1 t = new T1();
System.out.print(this.m);
}
}//此例将会报错,首先this指代不明(t没有用this),
//一般情况下this不用在public static void mian(String[] args)中
改正:
public class T1 extends T{
static int m = 10;
public void n(){
System.out.print(this.m);
}
public static void main(String[] args){
T1 t = new T1();
t.n();
}
}//this并非不能引用static变量,但必须this指向了实例对象,且实例
//对象中含有该static对象
2同理super:
public class T1 extends T {
public static void main(String[] args){
System.out.print(super.m);
}
}
class T{
static int m = 10;
}//此例同样会报错,super没有所指向的实例
改正:
public class T1 extends T {
public void n(){
System.out.print(super.m);
}
public static void main(String[] args){
T1 t = new T1();
t.n();
}
}
class T{
static int m = 10;
}//经过改正,super可以调用父类的静态变量了,但必须是通过实例调用。
总结:super和this必须在指向对象实例确定的情况下,才能使用。