面向对象练习题(1)
1.打印效果如下:
老师的信息:
姓名:王飞
年龄:30
性别:男
工龄:5
我承诺,我会认真教课。
王飞爱玩象棋
学生的信息:
姓名:小明
年龄:15
性别:男
学号:00023102
我承诺,我会 好好学习。
小明爱玩足球。
王飞爱玩象棋
小明爱玩足球。
2.案例题目描述及评分标准:
①做一个Student类,Student类有名称(name),性别(sex),年龄(age),学号(stu_id),做合理封装,通过构造器在创建对象时将4个属性赋值。
②写一个Teacher类,Teacher类有名称(name),性别(sex),年龄(age),工龄(work_age),做合理封装,通过构造器在创建对象时将4个属性赋值。
③因为Student类和Teacher类有公共内容,所以尝试编写父类(Person),将公共内容抽象成父类。
④学生需要有学习的方法(study),在方法里写成“我承诺,我会好好学习。”。
⑤教师需要有教学的方法(teach),在方法里写上“我承诺,我会认真教学。”。
⑥学生和教师都有玩的方法(play),学生玩的是足球,老师玩的是象棋,此方法是Stirng,分别返回“xx爱玩足球”和“xx爱玩象棋”(其中xx分别代表学生和老师的姓名)。因为玩的方法名称都一样,所以要求此方法定义在父类中,子类实现重写。
⑦定义一个学校类对老师和学生进行管理,在学校类中定义manager(Person person)方法,实现对不同的对象进行判断,如果是输入类型为Teacher类型,调用Teacher类中play方法进行输出,如果输入类型为Student类型,调用Student类中play方法进行输出。
⑧要求测试类结果和效果案例一样。
3.评分规则
①Student类及study方法定义正确。(5分)
②Teacher类及teach方法定义正确(5分)
③Person父类定义正确,需要老师类和学生类继承,并按要求完成功能。(5分)
④play方法定义正确(5分)
⑤学校类定义正确,能实现对传入类型的正确判断。(10分)
⑥测试类定义正确(5分)
⑦运行结果正确(5分)
//因为Student类和Teacher类有公共内容,所以尝试编写父类(Person),将公共内容抽象成父类。
public class Person {
String name;
String sex;
int age;
public Person() {
super();
}
public Person(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "姓名:" + name + "性别" + sex + "年龄" + age ;
}
//学生和教师都有玩的方法(play),学生玩的是足球,老师玩的是象棋,此方法是Stirng,分别返回“xx爱玩足球”和“xx爱玩象棋”(其中xx分别代表学生和老师的姓名)。因为玩的方法名称都一样,所以要求此方法定义在父类中,子类实现重写。
public String play() {
return"爱玩游戏";
}
}
//写一个Teacher类,Teacher类有名称(name),性别(sex),年龄(age),工龄(work_age),做合理封装,通过构造器在创建对象时将4个属性赋值
public class Teacher extends Person{
int work_age;//工龄
public Teacher() {
}
public Teacher(String name, String sex, int age, int work_age) {
super(name, sex, age);
this.work_age = work_age;
}
public int getWork_age() {
return work_age;
}
public void setWork_age(int work_age) {
this.work_age = work_age;
}
//教师需要有教学的方法(teach),在方法里写上“我承诺,我会认真教学。”
public void teach() {
System.out.println("我承诺,我会认真教学");
}
@Override
public String play() {
return "爱玩象棋";
}
@Override
public String toString() {
return "Teacher [work_age=" + work_age + "]";
}
//做一个Student类,Student类有名称(name),性别(sex),年龄(age),学号(stu_id),做合理封装,通过构造器在创建对象时将4个属性赋值。
public class Student extends Person {
String stu_id;
public Student(String name, String sex, int age, String stu_id) {
super(name, sex, age);
this.stu_id = stu_id;
}
public Student() {
}
//学生需要有学习的方法(study),在方法里写成“我承诺,我会好好学习。”。
public void study() {
System.out.println("我承诺,我会好好学习");
}
@Override
public String play() {
return "爱玩足球";
}
@Override
public String toString() {
return super.toString() + "学号" + stu_id;
}
}
//定义一个学校类对老师和学生进行管理,在学校类中定义manager(Person person)方法,实现对不同的对象进行判断,如果是输入类型为Teacher类型,调用Teacher类中play方法进行输出,如果输入类型为Student类型,调用Student类中play方法进行输出。
public class School {
public static void manager(Person p) {
if(p instanceof Student) {
Student stu = (Student) p;
String string = stu.play();
System.out.println(string);
}else if (p instanceof Teacher) {
Teacher t = (Teacher) p;
String str = t.play();
System.out.println(str);
}
}
public static void main(String[] args) {
manager(new Teacher());
manager(new Student());
}
}
//要求测试类结果和效果案例一样。
public class Test {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.name="王飞";
teacher.sex="男";
teacher.age=30;
teacher.work_age=5;
System.out.println("老师的信息:"+teacher);
teacher.teach();
School.manager(teacher);
System.out.println("---------------------------");
Student student = new Student();
student.name="小明";
student.sex="男";
student.age=15;
student.stu_id="00023102";
System.out.println("学生的信息:"+student);
student.study();
School.manager(student);
}
}
}