【java】super 关键字

super 关键字的作用: 

调用父类的构造方法;

➢ 调用父类的成员方法;

需要注意:super 只能应用在成员方法和构造方法中,不能应用在静态方法中(和 this 是一样的),如果在构造方法中使用必须放在第一行 。

为什么会有 super 关键字? 

因为子类必须要调用父类的构造方法,先把父类构造完成,因为子类依赖于父类, 没有父,也就没有子;

有时需要在子类中显示的调用父类的成员方法。

那么我们以前为什么没有看到 super,而且我们也有继承,如:Student 继承了 Person? 

因为子类中我们没有显示的调用构造方法,那么他会默认调用父类的无参构造方 法,此种情况下如果父类中没有无参构造方法,那么编译时将会失败。

注意构造方法不存在覆盖的概念,构造方法可以重载。

1、调用默认构造方法

public class SuperTest01 { 
 
     public static void main(String[] args) {   
            Person student = new Student();  
        }  
} 
 
class Person {  
    //学号  
    private int id;     
    //姓名  
    private String name;    
    //性别  
    private boolean sex;    
    //地址  
    private String address;    
    //年龄  
    private int age;    
    public Person() {   
        //System.out.println(this);   
        System.out.println("----------Person-----------");   
    }
    
    //设置学号 
    public void setId(int studentId) {   
        id = studentId;    
        }    
    //读取学号  
    public int getId() {   
        return id;   
        }    
    public void setName(String studentName) {   
        name = studentName;  
        }    
    public String getName() {   
        return name;   
        }    
    public void setSex(boolean studentSex) {   
        sex = studentSex;  
        }    
    public boolean getSex() {   
        return sex;   
        }    
    public void setAddress(String studentAddress) {   
        address = studentAddress;  
        }    
    public String getAddress() {   
        return address; 
        }          
    public void setAge(int studentAge) {   
        if (studentAge >=0 && studentAge <=120) {    
            age = studentAge;   
            }  
        }    
    public int getAge() {   
        return age;   
        }  
    } 

class Student extends Person {    
    //班级编号  private int classesId;    
    public Student() {   
        //System.out.println(this);   
        //显示调用父类的构造方法         
        //调用父类的无参的构造函数   
        //super(); 
         System.out.println("--------Student----------");   
        //编译错误,必须将 super 放到构造函数的第一语句   
        //必须先创建父类,才能创建子类    
        //super();  
        }    
    public void setClassesId(int classesId) {   
        this.classesId = classesId;  
        }    
    public int getClassesId() {   
        return classesId;  
        } 
}

关于构造方法的执行顺序,先执行父类的再执行子类的,必须完成父类的所有初始化,才能创建子类。 

2、调用带参数的构造方法 

//父类构造方法
public Person(int id, String name, boolean sex, String address, int age) {   
    this.id = id;   
    this.name = name;   
    this.sex = sex;   
    this.address = address;   
    this.age= age;  
}



//子类中
//手动调用调用带参数的构造函数   
super(id, name, sex, address, age); 

3、采用 super 调用父类的方法 

//父类中
public void printInfo() {   
System.out.println("id=" + id + ", name=" + name + ",sex=" + sex + ", address=" + address + ", age=" + age);   
} 


//子类中
public void printInfo() {   
    //System.out.println("id=" + getId() + ", name=" + getName() + ",sex=" + getSex() + ",                         
    //address=" + getAddress() + ", age=" + getAge() + ", workYear=" + workYear);        
      System.out.println("workYear=" + workYear);   
    //采用 super 调用父类的方法   
      super.printInfo();  
}   

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值