【案例4-4】学生和老师
【案例介绍】
1.案例描述
在班级中上课时,老师在讲台上讲课,偶有提问,会点名学生回答问题。虽然老师和学生都在讲话,但讲话的具体内容却不相同。本案例要求使用抽象类的知识编写一个程序实现老师上课的情景。
2.运行结果
运行结果
【案例分析】
(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
- abstract class Person {
- private String name;
- private int age;
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public int getAge() {
- return age;
- }
- public abstract void say();
- }
- class Student extends Person{
- public Student(String name, int age) {
- super(name, age);
- }
- public void say() {
- System.out.println("学生姓名:"+this.getName()+",年龄:
- "+this.getAge()+",负责回答问题。");
- }
- }
- class Teacher extends Person{
- public Teacher(String name, int age) {
- super(name, age);
- }
- public void say() {
- System.out.println("老师姓名:"+this.getName()+",年龄:
- "+this.getAge()+",负责提出问题。");
- }
- }
- public class AbstractDemo{
- public static void main(String[] args){
- Person per1 = new Student("张三",18);
- Person per2 = new Teacher("李四",30);
- per1.say();
- per2.say();
- }
- }
上述代码中,第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()方法。