调用父类的构建器是子类所必须的一种行为(当父类有带参数的构建器),这是面向对象继承这个环节所必须的,这个行为发生在整个继承链当中,比如:public class Father{ String name; public Father(String name){ this.name=name; } public String getName(){ return this.name; } }public class Child extends Father{ public Child(String name){ super(name); } }显然,父类的getName()方法被继承,但是可以看出,getName的正确执行是依赖于父类的构建行为的。that is the point.
SUPER:指向父类的成员函数, 如果在一个子类里覆盖了父类的某个成员函数, 但又想调用父类的成员函数。 class SuperClass{ private int x=100; public int getX(){ return x; } } class Subbie extends SuperClass{ private int y=200; public int getY(){ return y; } } public class p101{ public static void main(String[] args){ SuperClass superA=new SuperClass(),superB; Subbie subA=new Subbie(),subB; //用子类对象作为实际参数传递给应是父类对象的形参 (new p101()).useSubAsSuper(subA); superB=subA; //把子类对象赋予父类对象 System.out.println("superB.getX():"+superB.getX()); //如果输出中用到方法getY()将出错,如下一句 //System.out.println(superB.getX()+" "+superB.getY()); //subB=superA; //把父类对象赋予子类对象将出错
public class F
{
public F(){}
}class S extends F
{
public S()
{
super();
}
}
String name;
public Father(String name){
this.name=name;
}
public String getName(){
return this.name;
}
}public class Child extends Father{
public Child(String name){
super(name);
}
}显然,父类的getName()方法被继承,但是可以看出,getName的正确执行是依赖于父类的构建行为的。that is the point.
super()必须用在你构造函数的第一行,它代表你引用你直接父类的构造函数。
super.func()就是表示你引用你直接父类的可见函数和成员变量
如果在一个子类里覆盖了父类的某个成员函数,
但又想调用父类的成员函数。
class SuperClass{
private int x=100;
public int getX(){
return x;
}
}
class Subbie extends SuperClass{
private int y=200;
public int getY(){
return y;
}
}
public class p101{
public static void main(String[] args){
SuperClass superA=new SuperClass(),superB;
Subbie subA=new Subbie(),subB;
//用子类对象作为实际参数传递给应是父类对象的形参
(new p101()).useSubAsSuper(subA);
superB=subA; //把子类对象赋予父类对象
System.out.println("superB.getX():"+superB.getX());
//如果输出中用到方法getY()将出错,如下一句
//System.out.println(superB.getX()+" "+superB.getY());
//subB=superA; //把父类对象赋予子类对象将出错
//把指向子类地址的父类对象superB强制转换成子类对象,并赋予subB
subB=(Subbie)superB;
System.out.println(subB.getX()+" "+subB.getY());
}
public void useSubAsSuper(SuperClass x){ //该方法的形参是父类对象
System.out.println(x.getX()+"!!!!!!!");
}
}