Java案例分析
【案例4-4】学生和老师
2024-10-25 13 0
简介 1.案例描述 在班级中上课时,老师在讲台上讲课,偶有提问,会点名学生回答问题。虽然老师和学生都在讲话,但讲话的具体内容却不相同。本案例要求使用抽象类的知识编写一个程序实现老师上课的情景。
【案例4-4】学生和老师
【案例介绍】
1.案例描述
在班级中上课时,老师在讲台上讲课,偶有提问,会点名学生回答问题。虽然老师和学生都在讲话,但讲话的具体内容却不相同。本案例要求使用抽象类的知识编写一个程序实现老师上课的情景。
2.运行结果
运行结果
【案例目标】
l 学会“学生和老师”的实现思路。
l 独立完成“学生和老师”的源代码编写、编译及运行。
l 掌握方法的重写。
l 掌握抽象类的应用。
【案例分析】
(1)定义一个抽象类Person,在Person类中声明两个属性:name和age,并设置其对应的getter方法,用于获取人的姓名和年龄;在Person类中声明一个有参构造方法,用于对Person类中的属性进行初始化;在Person类中声明一个say()方法。
(2)定义类 Student,并继承Person类。声明Student类的构造方法并重写Person类的say()方法。
(3)定义类 Teacher,并继承Person类。声明Teacher类的构造方法并重写Person类的say()方法。
(4)定义测试类,在测试类中分别使用向上转型的方式实例化两个Person对象per1和per2,并分别使用per1和per2调用say()方法。
【案例实现】
AbstractDemo.java
1 abstract class Person {
2 private String name;
3 private int age;
4 public Person(String name, int age) {
5 this.name = name;
6 this.age = age;
7 }
8 public String getName() {
9 return name;
10 }
11 public int getAge() {
12 return age;
13 }
14 public abstract void say();
15 }
16 class Student extends Person{
17 public Student(String name, int age) {
18 super(name, age);
19 }
20 public void say() {
21 System.out.println("学生姓名:"+this.getName()+",年龄:
22 "+this.getAge()+",负责回答问题。");
23 }
24 }
25 class Teacher extends Person{
26 public Teacher(String name, int age) {
27 super(name, age);
28 }
29 public void say() {
30 System.out.println("老师姓名:"+this.getName()+",年龄:
31 "+this.getAge()+",负责提出问题。");
32 }
33 }
34 public class AbstractDemo{
35 public static void main(String[] args){
36 Person per1 = new Student("张三",18);
37 Person per2 = new Teacher("李四",30);
38 per1.say();
39 per2.say();
40 }
41 }
上述代码中,第1~15行代码定义了一个抽象类Person,在Person类中声明了name和age属性和其对应的getter方法和构造方法,并声明了say()方法;第16~24行代码定义了一个Student类并继承Person类,在Student类中声明了Student类的构造方法并重写Person类的say()方法;第25~33行代码定义了一个Teacher类并继承Person类,在Teacher类中声明了Teacher类的构造方法并重写Person类的say()方法;第34~41行代码分别使用向上转型的方式实例化了两个Person对象per1和per2,并分别使用per1和per2调用say()方法。