1、1 使用super关键字。
子类可以继承父类的非私有成员变量和成员方法(不是以private关键字修饰的)作为自己的成员变量和成员方法。但是,如果子类中声明的成员变量和父类中的成员变量同名,则子类不能继承父类的成员变量,此时称子类的成员变量隐藏了父类的成员变量。如果子类中声明的成员方法与父类的成员方法同名,并且方法的返回值及参数个数和类型也相同,则子类不能继承父类的成员方法,此时称子类的成员方法重写了父类的成员方法。(注意:虽然这儿的返回值、参数个数和类型相同,但方法里面实现代码块不同)。这时,如果想在子类中访问父类中被子类隐藏的成员方法或变量,就可以使用super关键字。
super关键字的两个作用:
作用A:调用父类的构造方法。
子类可以调用由父类声明的构造方法。但是必须在子类的构造方法中使用super关键字来调用。语法格式如下:
super([参数列表]);
如果父类的构造方法中包括参数,则参数列表为必选项,用于指定父类构造方法的入口参数。
例:在子类中调用父类的构造方法。
package classandobject;
public class Beast { //父类
String skin =""; //成员变量
public Beast(){ //默认构造方法
}
public Beast (String strSkin) {
skin = strSkin; //带参数的构造方法
}
public void move() {
System.out.println("跑。。。"); //成员方法
}
}
package classandobject;
public class Tiger extends Beast {
public Tiger () { //子类使用父类的带参数的构造方法
super("条纹");
}
}
作用 B:操作被隐藏的成员变量和被重写的成员方法。
如果想在子类中操作父类中被隐藏的成员变量和被重写的成员方法,也可以使用super关键字。语法格式如下:
super.成员变量名
super.成员方法名([参数列表])
例:如果想在子类Tiger的方法中改变父类Beast的成员变量skin的值,可以使用如下代码:
package classandobject;
public class Tiger extends Beast {
public Tiger () { //使用父类的带参数的构造方法
super.skin="条纹"; //等效于super("条纹");
super.move(); //注意:super.move()方法不能在Tiger()带参构造方法外
}
}