欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【java】super 关键字如何使用

程序员文章站 2022-04-15 18:31:38
super 关键字的作用:➢ 调用父类的构造方法;➢调用父类的成员方法;需要注意:super 只能应用在成员方法和构造方法中,不能应用在静态方法中(和 this 是一样的),如果在构造方法中使用必须放在第一行 。为什么会有 super 关键字?➢因为子类必须要调用父类的构造方法,先把父类构造完成,因为子类依赖于父类, 没有父,也就没有子;➢有时需要在子类中显示的调用父类的成员方法。那么我们以前为什么没有看到 super,而且我们也有继承,如:Student 继承了 Pers......

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();  
}   

 

 

 

本文地址:https://blog.csdn.net/Zhouzi_heng/article/details/110259291