当需要在子类中调用父类的成员变量时,可以使关键字super(变量1,变量2,变量3)
super关键字与this关键字作用类似,都是将屏蔽了的成员变量、成员方法变的可见,可用,也就是说,用来引用屏蔽的成员变量和方法,不过,super是用在子类中,目地只有一个,就是访问直接父类中被屏蔽的内容,进一步提高代码的可重用性和灵活性 ,super关键字不仅可以访问父类的构造方法,还可以访问父类的成员,包括父类的属性和一般方法等
super的语法是:
访问父类构造方法:super(参数)
访问父类的属性、方法:super.父类属性和方法,这里有区分父类属性权限为private的时候,是不可以直接用super.属性的,public才可以
public class Department { //定义父类的成员变量/属性 private int amount=0;//部门人数 protected String responsibility="待定";//部门职责 public String manager="无名氏";//部门经理
amount属性是私有的,所以在子类中不可以用super.amount来调用,如果不可以调成员变量,但又要父类中它的值,那么就调父类中这个属性的公共Get属性方法
manager是公有的,所以可以在子类中super.manager来调用
responsibility是受保护的,在子类中可以用super.responsibility来调用
实例代码:
package com.cn.jicheng; /*部门类 * 请使用继承知识,将8个部门类中一样的代码抽取成一个“部门类” */ public class Department { //定义私有的成员变量 private int ID;//部门编号 private String name="待定";//部门名称 private int amount=0;//部门人数 protected String responsibility="待定";//部门职责 public String manager="无名氏";//部门经理 //无参构造方法,如果类中有有参的构造方法,一定要补上一个无参的构造方法 public Department(){ } //定义有参的构造方法,构造方法是为了给成员变量赋初始值 public Department(String name,String manager,String responsibility){ this.name=name; this.manager=manager; this.responsibility=responsibility; } //获取ID的方法 public int getID() { return ID; } //设置ID值的方法 public void setID(int iD) { this.ID = iD; } //获取部门人数的方法 public int getAmount() { return amount; } //设置部门人数的方法 public void setAmount(int amount) { this.amount = amount; } //其它的不用了,因为已经用了构造方法赋值 public void printDetail(){ System.out.println("部门:"+this.name+"\n经理:"+this.manager+"\n部门职责:"+this.responsibility+"\n***************"); } }
package com.cn.jicheng; /* * 人事部类,继承department类的属性和方法 */ public class PersonelDept extends Department { private int count;//本月计划招聘人数 public PersonelDept(String name,String manager,String responsibility,int count){ //用super关键字继承父类的成员变量 super(name,manager,responsibility); this.count=count; } //获取人事部招聘人数 public int getCount() { return count; } //设置人事部招聘人数 public void setCount(int count) { this.count = count; } }
package com.cn.jicheng; /* * 研发部继承department父类的成员变量和方法 */ public class ResearchDept extends Department{ private String speciality;//研发方向 public ResearchDept(String name,String manager,String responsibility,String speciality){ //访问父类的有参构造方法 super(name,manager,responsibility); this.speciality=speciality; } public ResearchDept(String speciality){ super();//调用父类无参构造方法 this.speciality=speciality; } public String getSpeciality(){ return speciality; } public void setSpeciality(String speciality) { this.speciality = speciality; } }
1 package com.cn.jicheng; 2 3 public class Test { 4 5 /**测试类 6 * @param args 7 */ 8 public static void main(String[] args) { 9 PersonelDept per=new PersonelDept("人事部","王经理", "负责公司的人才招聘和培训。", 10); 10 per.printDetail(); 11 } 12 13 }