类的继承与方法重写
一、 实验目的:
- 理解类继承的意义和作用;
- 掌握类继承的程序设计;
- 理解父类中哪些成员可以直接继承、哪些成员不能被继承;
- 掌握成员方法的重写;
- 理解哪些方法可以被重写、哪些方法不能被重写;
- 理解重写与重载的区别。
二、 实验要求:
以下每一个类单独保存一个文件:
设计一个类,名为 People:
-
成员变量为:
姓名,数据类型为 String
性别,数据类型为 char,数据包括’F’和’M’。
家庭地址,数据类型 String -
设计一个构造方法:
包括三个参数,分别对应成员变量姓名、性别、家庭地址,在实例化时对三
个成员变量赋初值。 -
设计一个成员方法 info(),访问修饰符为 public,以 String 类型,输出三个成员变量的值,输出格式为:
姓名:XXX,性别:X,地址:XXXXXXXXXXXXXXXXXX -
设计一个成员方法 display(),访问修饰符为 final,用于显示三个成员变量
的值,显示格式为:
姓名: XXXXXX
性别: X
地址: XXXXXXXXXXXXXXXXXXXX
设计一个职工 Staff 类
- 继承 People 类;
- 增加如下成员变量:
毕业院校,类型 String
入职年份,类型 int - 设计一个构造方法,实现对包括父类的所有成员变量赋初值。通过调用
父类的构造方法实现对父类三个成员变量赋初值,接着对本类中新增的两个成员变量赋初值。 - 重写父类的 info()方法,返回值为 String,通过调用父类的 info()方法取得
父类三个成员的值,增加本类 2 个成员变量,实现 String 的完整输出,格式:
姓名:XXX,性别:X,地址:XXXXXXXXXXXXXXXXXX,毕业院校:XXXXX,
入职年份:XXXXX 年 - 重写父类的 display()方法,显示整个对象的全部信息。注意编译出现什么
问题,分析为什么?如何修改。
设计一个 Teacher 类:
- 继承 Staff 类;
- 增加如下成员变量:
职称,数据类型为 String
级别,数据类型为 int;一般有 12 级,1—12 级 - 设计一个构造方法,通过构造方法在实例化时实现对所有成员变量、包
括父类的成员变量进行初始化; - 重写父类的 info()方法,返回类型为 String,通过调用父类的同名方法、
用它返回包括所有父类的所有成员变量的值。
设计一个可以执行的 TeacherManagement 类
在该类的 main()方法中,用Teacher 类定义、实例化 TC1 和 TC2 两个对象,并调用对象的 info()方法显示对象的所有信息。
package com.jmu.testextends;
/**
* @Author zhinian
* @Date 2021/4/2 18:58
* @Version 1.0
*/
//定义一个测试类 TeacherManagement
public class TeacherManagement {
public static void main(String[] args) {
Teacher TC1 = new Teacher("陈福",'M',"集友楼5-505",
"诚毅学院",2021,"教授",12);
Teacher TC2 = new Teacher("执念",'F',"集友楼5-505",
"集美大学",2022,"讲师",2);
System.out.println(TC1.info());
System.out.println(TC2.info());
System.out.println("=============================");
System.out.println("重写了toString:");
System.out.println(TC1);
System.out.println(TC2);
}
}
package com.jmu.testextends;
/**
* @Author zhinian
* @Date 2021/4/2 18:38
* @Version 1.0
*/
//定义一个People类,父类
public class People {
String name;//姓名
char sex;//性别
String address;//家庭地址
public People() {
}
public People(String name, char sex, String address) {
this.name = name;
this.sex = sex;
this.address = address;
}
public String info(){
return "姓名:"+this.name+",性别:"+this.sex+",地址:"+this.address;
}
public String display(){//当父类成员方法用final关键字修饰时,不可被子类继承
return "姓名:"+this.name+"性别:"+this.sex+",地址:"+this.address;
}
}
package com.jmu.testextends;
/**
* @Author zhinian
* @Date 2021/4/2 18:42
* @Version 1.0
*/
//定义一个Staff类继承People类
public class Staff extends People{
String graduatedCollege;//毕业院校
int employmentYear;//入职年份
public Staff(String name, char sex, String address, String graduatedCollege, int employmentYear) {
super(name, sex, address);
this.graduatedCollege = graduatedCollege;
this.employmentYear = employmentYear;
}
//重写info方法
@Override
public String info() {
return "这个是重写info方法,"+super.info()+
",毕业院校:"+this.graduatedCollege+",入职年份:"+this.employmentYear;
}
//重写display方法
@Override
public String display() {
return "这个是重写display方法,"+super.display()+
"毕业院校:"+this.graduatedCollege+",入职年份:"+this.employmentYear;
}
@Override
public String toString() {
return "Staff{" +
"graduatedCollege='" + graduatedCollege + '\'' +
", employmentYear=" + employmentYear +
", name='" + name + '\'' +
", sex=" + sex +
", address='" + address + '\'' +
'}';
}
}
package com.jmu.testextends;
/**
* @Author zhinian
* @Date 2021/4/2 18:55
* @Version 1.0
*/
//定义一个Teacher类,继承Staff类
public class Teacher extends Staff{
String positionalTitles;//职称
int rank;//级别
public Teacher(String name, char sex, String address, String graduatedCollege, int employmentYear, String positionalTitles, int rank) {
super(name, sex, address, graduatedCollege, employmentYear);
this.positionalTitles = positionalTitles;
this.rank = rank;
}
//重写info方法
@Override
public String info() {
return super.info()+",职称:"+this.positionalTitles+",级别:"+this.rank;
}
@Override
public String toString() {
return "Teacher{" +
"positionalTitles='" + positionalTitles + '\'' +
", rank=" + rank +
", graduatedCollege='" + graduatedCollege + '\'' +
", employmentYear=" + employmentYear +
", name='" + name + '\'' +
", sex=" + sex +
", address='" + address + '\'' +
'}';
}
}