Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

Java 抽象类与继承实战解析:多态与方法重写的应用

阿贵
2天前发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年08月31日,已超过2天没有更新,若内容或图片失效,请留言反馈。

Java 抽象类与继承实战解析:多态与方法重写的应用

75.png

一、原题完整代码呈现

以下是计算机二级Java考试中关于抽象类、继承与多态的典型题型,主要考察抽象类定义、抽象方法声明、类继承及多态调用,包含5处需要填写的空白(标记为//*********Found**********):

import java.text.*;

public class Java_2
{
   public static void main(String[] args)
   {
      Person[] people = new Person[2];
      people[0] = new Worker("老张", 30000);
      people[1] = new Student("小王", "计算机科学");
      for (int i = 0; i < people.length; i++)
      {
         Person p = people[i];
         //*********Found**********
         System.out.println(____________________() + ", " + p.getDescription());
      }
   }
}

//*********Found**********
________________ class Person
{
   public Person(String n)
   {
     name = n;
   }
//*********Found**********
   public ___________________ String getDescription();
   public String getName()
   {
     return name;
   }
   private String name;
}

//*********Found**********
class Worker _________________ Person
{
   public Worker(String n, double s)
   {
      super(n);
      salary = s;
   }
   public String getDescription()
   {
      NumberFormat formatter = NumberFormat.getCurrencyInstance();
      return "工人,年薪是 " + formatter.format(salary) + "。";
   }
   private double salary;
}

//*********Found**********
class Student _________________ Person
{
   public Student(String n, String m)
   {
      super(n);
      major = m;
   }
   public String getDescription()
   {
      return "学生,专业是 " + major + "。";
   }
   private String major;
}

二、空白处逐一解析与解答

1. 第一处空白:获取对象的姓名(多态调用中的 getName 方法)

答案:p.getName

//*********Found**********
System.out.println(p.getName() + ", " + p.getDescription());

解析
pPerson类型的引用,指向WorkerStudent对象(多态)。Person类定义了getName()方法(返回姓名),子类继承该方法,因此通过p.getName()可获取对象的姓名,与后面的getDescription()(描述信息)拼接输出。

2. 第二处空白:声明抽象类 Person

答案:abstract

//*********Found**********
abstract class Person

解析
Person类中包含未实现的方法getDescription()(仅声明,无方法体,以分号结尾),这类方法称为抽象方法。包含抽象方法的类必须声明为抽象类,关键字为abstract,因此填写abstract

3. 第三处空白:声明抽象方法 getDescription

答案:abstract

//*********Found**********
public abstract String getDescription();

解析
getDescription()方法在Person类中未实现,需要声明为抽象方法(强制子类实现)。抽象方法的声明需添加abstract关键字,因此填写abstract

4. 第四处空白:Worker 类继承 Person 类

答案:extends

//*********Found**********
class Worker extends Person

解析
WorkerPerson的子类,需要继承Person类的属性和方法(如namegetName())。Java中类的继承通过extends关键字实现,因此填写extends

5. 第五处空白:Student 类继承 Person 类

答案:extends

//*********Found**********
class Student extends Person

解析
Worker类同理,Student作为Person的子类,需通过extends关键字继承Person类,以复用父类的代码并实现抽象方法getDescription(),因此填写extends

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序通过抽象类Person及其子类WorkerStudent,演示面向对象的继承与多态特性,核心功能包括:

  1. 定义抽象类Person,包含姓名属性和抽象方法getDescription()(描述信息)
  2. WorkerStudent类继承Person,分别实现getDescription()(返回职业/专业描述)
  3. main方法中,用Person数组存储WorkerStudent对象,通过多态调用统一输出姓名和描述
运行说明
  1. 初始化对象数组:
    创建Person[] people数组,存储两个对象:

    • Worker("老张", 30000):姓名“老张”,年薪30000
    • Student("小王", "计算机科学"):姓名“小王”,专业“计算机科学”
  2. 多态调用:
    循环遍历数组,通过Person类型引用p调用:

    • p.getName():继承自Person类的方法,返回姓名
    • p.getDescription():调用实际对象(WorkerStudent)的实现方法
  3. 输出结果:

    老张, 工人,年薪是 ¥30,000.00。
    小王, 学生,专业是 计算机科学。

五、核心知识点总结

  1. 抽象类与抽象方法

    • 抽象类:用abstract修饰的类,可包含普通方法和抽象方法,不能实例化(如Person无法创建对象,只能作为父类)
    • 抽象方法:用abstract修饰的方法,只有声明(无方法体,以分号结尾),必须在非抽象子类中实现
    • 作用:定义通用模板(如Person为“人”的抽象概念),强制子类实现特定方法(如getDescription()描述具体身份)
  2. 继承的特性

    • 关键字extends:子类通过extends继承父类,获得父类的非私有属性和方法(如WorkerStudent继承namegetName()
    • 构造方法调用:子类构造方法中需通过super(参数)调用父类对应构造方法(如super(n)调用Person(String n)
    • 代码复用:避免重复定义通用属性和方法(如姓名相关逻辑仅在Person中定义)
  3. 多态的实现

    • 多态表现:父类引用指向子类对象(Person p = new Worker(...)
    • 动态绑定:调用方法时,实际执行的是子类的实现(p.getDescription()根据p指向的实际对象调用WorkerStudent的方法)
    • 优势:统一接口(用Person数组管理不同子类对象),简化代码,提高扩展性
  4. 方法重写(Override)

    • 子类需重写父类的抽象方法(否则子类也需声明为抽象类)
    • 重写要求:方法名、参数列表、返回值类型必须与父类一致(协变返回值除外),访问权限不低于父类
    • 本题中WorkerStudentgetDescription()均重写了Person的抽象方法

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白方法调用错误:写成getName()(缺少对象引用p,编译错误)或p.namename是私有成员,无法直接访问)
    • 第二处空白抽象类声明错误:遗漏abstract(类包含抽象方法,必须声明为抽象类,否则编译错误)
    • 第三处空白抽象方法声明错误:遗漏abstract(未实现的方法需声明为抽象方法,否则编译错误)
    • 第四/五处空白继承关键字错误:写成implementsimplements用于实现接口,继承类用extends
  2. 应试技巧

    • 抽象类口诀:“抽象类带abstract,可含抽象方法;抽象方法无实现,子类必须重写它”
    • 继承原则:“子类extends父类,super调用父构造,私有成员不能直接用,getter方法来帮忙”
    • 多态应用:“父类引用指子类,调用方法看实际对象,统一管理真方便”
    • 调试技巧:打印对象类型(p.getClass().getName()),验证多态中实际对象的类型

通过本题,我们掌握了抽象类的定义、抽象方法的声明、类的继承实现及多态的应用。这些是面向对象编程的核心特性,理解抽象类作为“模板”和多态作为“统一接口”的思想,对设计灵活可扩展的程序具有重要意义。

喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消 登录评论