面向物件練習題(1)
阿新 • • 發佈:2021-01-16
面向物件練習題(1)
1.列印效果如下:
老師的資訊:
姓名:王飛
年齡:30
性別:男
工齡:5
我承諾,我會認真教課。
王飛愛玩象棋
學生的資訊:
姓名:小明
年齡:15
性別:男
學號:00023102
我承諾,我會 好好學習。
小明愛玩足球。
王飛愛玩象棋
小明愛玩足球。
2.案例題目描述及評分標準:
①做一個Student類,Student類有名稱(name),性別(sex),年齡(age),學號(stu_id),做合理封裝,通過構造器在建立物件時將4個屬性賦值。
②寫一個Teacher類,Teacher類有名稱(name),性別(sex),年齡(age),工齡(work_age),做合理封裝,通過構造器在建立物件時將4個屬性賦值。
④學生需要有學習的方法(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);
}
}
}