定义子类
继承Employee类来定义Manager类的格式,关键字extends表示继承。
public class Manager extends Employee
Employee类是一个超类,但是Manager类比超类Employee封装了更多的数据,拥有更多的功能。子类比超类拥有的功能更加丰富。
People people = new Student
方法执行时总是执行new后的方法。
当我们希望调用超类Employee中的getSalary方法时,此时我们需要关键字super解决这个问题。
public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bouns;
}
下面示例中:People为超类,Student为子类,在子类中调用超类的方法。
其中private String name; private int age; private int sex;
为超类中定义的,子类中可以直接用super调用并使用。
public Student(String studentNum, String school, String name, int age, int sex) {
super(name,age,sex);
this.studentNum = studentNum;
this.school = school;
}
注:使用super调用构造器的语句必须是子类构造器的第一条语句。
toString() 方法可把一个逻辑值转换为字符串,并返回结果。
下面是两个代码块:
People代码:
public String toString() {
return "People{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}';
}
Student代码
package com.qcby.test;
public class Student extends People {
private String studentNum;
private String school;
public String getStudentNum() {
return studentNum;
}
public void setStudentNum(String studentNum) {
this.studentNum = studentNum;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public void run(){
System.out.println("student run");
}
public Student(String studentNum, String school, String name, int age, int sex) {
super(name,age,sex);
this.studentNum = studentNum;
this.school = school;
}
@Override
public String toString() {
return "Student{" +
"studentNum='" + studentNum + '\'' +
", school='" + school + '\'' +
"} " + super.toString();
}
}
在main中运行输出:
import com.qcby.test.People;
import com.qcby.test.Student;
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
People people = new People("hangasan",10,1);
Student student = new Student("10086","河北大学","sadasf",10,1);
System.out.println(people);
System.out.println(student);
}
}
多的可以描述少的。
在上边代码中,People为超类,Student为子类,Student可以转为People类,
Student student1 = new People()
空间少的强转描述大空间不可以。People类强转为Student类会出现错误。
覆盖方法
在一个继承关系下,子类与父类都有同一方法名,子类调用该方法叫重写。
Manager类的getSalary方法不能够直接的访问Employee(超类)的私有域。
在一个继承关系下,子类与父类都有同一方法名,this是默认调用子类方法的参数,如果使用super关键字,则调用父类的方法。