super关键字
1.子类重写了父类的变量
利用super关键字可以调用父类的变量
class F{
String name = "张三";//父类的变量
}
class S extends F{
String name = "张三丰";//子类重写父类的变量
void setName(){
System.out.println("父亲的名字为"+super.name);//显示父类的变量
System.out.println("儿子的名字为"+name);
}
}
public class Test2 {
public static void main(String[] args) {
S s = new S();
s.setName();
}
}
// 结果:
// 父亲的名字为张三
// 儿子的名字为张三丰
2.子类重写了父类的方法
用super关键字调用父类中与子类同名的方法
class F{
String name1 = "张三";
void setName(){//父类的方法
System.out.println("父类:"+name1);
}
}
class S extends F{
String name2 = "张三丰";
void setName(){//重写了父类的方法
System.out.println("子类:"+name2);
super.setName();//调用了父类的方法
}
}
public class Test2 {
public static void main(String[] args) {
S s = new S();
s.setName();
}
}
// 结果:
// 子类:张三丰
// 父类:张三
3.在子类的构造函数中调用父类的构造方法
在调用子类构造函数之前会先调用父类的构造函数,给从父类中继承的变量赋值
所以在子类构造函数的第一句那里会默认(不显示)的利用super()来调用父类中的构造函数
super();语句只能写在第一行
//super();调用无参构造函数
class F{
String name1 = "张三";
public F(){
System.out.println("我是父类无参的构造函数");
}
F(int n) {
for (int i = 0;i>n;i++){
System.out.println("我是父类有参的构造函数");
}
}
}
class S extends F{
String name2 = "张三丰";
public S(){
super(); //不用写,默认调用
System.out.println("我是子类构造函数");
}
}
public class Test2 {
public static void main(String[] args) {
S s = new S();
}
}
// 结果:
// 我是父类无参的构造函数
// 我是子类构造函数
//super(参数);调用无参构造函数
class F{
String name1 = "张三";
F(){
System.out.println("我是父类无参的构造函数");
}
F(int n) {
for (int i = 0;i<n;i++){
System.out.println("我是父类有参的构造函数");
}
}
}
class S extends F{
String name2 = "张三丰";
S(){
super(2); //调用父类构造函数
System.out.println("我是子类构造函数");
}
}
public class Test2 {
public static void main(String[] args) {
S s = new S();
}
}
// 结果:
// 我是父类有参的构造函数
// 我是父类有参的构造函数
// 我是子类构造函数