this的使用和说明
java的this关键字只能用于方法体内,java虚拟机(JVM)会给这个对象分配一个引用自身的指针,这个指针的名字就是this.
注意:函数参数或者函数中的局部变量和成员变量同名的话,成员变量被屏蔽,此时要访问成员变量则需要使用“this.成员变量”的方式引用成员变量,如果没有同名的情况下,可以直接使用。
运行结果
张三 25
Tom
5432112345
super的使用和说明
super关键字的作用是用于子类引用父类的成员,如属性、方法或者构造器。
- 调用父类构造器
基本格式是:super([arg_list]);
直接用super()加上父类构造器所需要的参数,就可以调用父类的构造器了。如果父类中有多个构造器,系统自动根据super()中参数个数和参数类型类匹配父类中的构造器。
需要注意的是如果子类中没有显式地调用父类中无参数的构造器,也没有在构造器中调用重载的其它构造器,则系统将会默认调用父类中无参数的构造器。此时如果父类中没有无参的构造器,则编译将会出错。
子类中的成员方法在使用super的时候,一般尽可能的使用private私有化。
子类构造方法调用父类的构造方法一般用super(参数列表)的方式调用,参数不是必须的。同时还要注意,super(参数列表)这条语句只能用在子类构造方法体中的第一行。
- 调用父类方法、属性
当super用于引用父类的属性或方法时,使用下面的格式:
super.属性
super.方法([arg_list])
注意,在这个时候,父类的属性或方法必须是那些protected或者public等可以让子类访问的属性或者方法。
案例分析
public class Father {
public String v = "父类Father";
public String x = "父类的成员变量";
public Father()
{
System.out.println("Father无参构造方法被调用");
}
public Father(String v)
{
this.v = "Father有参构造方法被调用";
}
public void showMessage()
{
System.out.println("Father的showMessage()方法被调用");
}
public static void main(String args[])
{
//自动生成存根方法
}
}
public class Son extends Father {
public String v = "子类Son";
public Son()
{
//调用父类的构造方法,且只能放在第一行
super();
System.out.println("Son的无参构造方法被调用");
}
public Son(String str)
{
super(str);
System.out.println("Son的有参构造方法被调用");
}
//覆盖了父类的成员方法showMessage()
public void showMessage()
{
System.out.println("Son的showMessage()方法被调用");
}
public void test()
{
String v = "局部变量v覆盖了成员变量v和超类变量v";
System.out.println("---------------------------");
System.out.println("子类局部变量v="+v);
System.out.println("子类成员变量v="+this.v);
System.out.println("父类成员变量v="+super.v);
System.out.println("子类继承而来的超类成员变量x="+x);
System.out.println("超类成员变量x="+super.x);
System.out.println("---------------------------");
showMessage();//调用子类的showMessage()方法
this.showMessage();//调用子类的showMessage()方法
super.showMessage();//调用父类的showMessage()方法
}
public static void main(String args[])
{
Son son =new Son();
son.test();
}
}