分类: Java
2007-04-28 16:15:51
super通常指代父类,如果在子类中需要引入父类的构造函数或某个方法,就需要使用super。
它有两种用法
1)、在子类的构造函数中使用,用来调用父类的构造函数
使用super(参数列表)的形式调用父类的构造函数
super(); //调用父类的无参构造函数
super(name);//调用父类具有相同形参的构造函数
例:class Person
{
public static void prt(String s)
{
System.out.println(s);
}
Person() // 无参数的构造函数
{
prt("A Person.");
}
Person(String name) // 有一个参数的构造函数
{
prt("A person name is:"+name);
}
}
下面的子类中,引用了父类的构造函数
public class Chinese extends Person
{
Chinese()
{
super(); //调用父类构造函数
//继承了父类的prt方法,在子类中没有重新定义该方法,所有不需要使用//super.prt()来调用
prt("A chinese.");
}
Chinese(String name)
{
super(name);//调用父类具有相同形参的构造函数
prt("his name is:"+name);
}
public static void main(String[] args)
{
Chinese cn=new Chinese();
cn=new Chinese("kevin");
}
}
注意:调用父类构造函数super()的语句必须放在其构造函数的第一行
2)、在其它非构造方法体内使用
super.父类的成员变量名 // 调用父类的成员变量
super.父类的方法名 // 调用父类的方法
在Java中,有时会遇到子类中的成员变量或方法与父类(有时也称超类)中的成员变量或方法同名,因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量和方法就隐藏了父类的成员变量或方法,但是我们如果想要使用父类中的这个成员变量或方法,此使就需要用到super,请看下面的类。
class Country
{
String name;
void value()
{
name="
}
}
下面的子类中,子类的成员变量和方法隐藏了父类的成员变量name和方法value(),
class City extends Country
{
String name;
void value()
{
name="
super.value(); //调用父类的value()方法
System.out.println(name);
System.out.println(super.name); // 调用父类的成员变量name
}
}
为了在子类中引用父类中的成员变量name和方法value(),在代码中我们使用了super.name和super.value();
所以显示的结果为