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

Java面向对象编程:多态与抽象类应用实例解析

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

Java面向对象编程:多态与抽象类应用实例解析

139.png

题目代码分析

以下是需要补全的Java代码,展示了使用抽象类和多态计算不同形状面积总和的功能:

public class Java_2 {
    public static void main(String []args) {
        Shape[] s = new Shape[3];
        s[0] = new Circle(5.0);
        s[1] = new Rectangle(3.0, 4.0);
        s[2] = new Rectangle(5.0, 6.0);
        //**********Found**********
        System.out.println("Total Area = " + _________.dostuff(s));
    }
}

//**********Found**********
_________ class Shape {
    abstract public double calcArea();
}

class Circle extends Shape {
    private double radius;
  
    public Circle(double radius) {
        //**********Found**********
        _________ = radius;
    }
   //**********Found**********
    public double _________() {
        return radius * radius * 3.14;
    }
}

class Rectangle extends Shape {
    private double length, width;

    public Rectangle(double a, double b) {
        length = a;
        width = b;
    }
    
    public double calcArea() {
        //**********Found**********      
        return _________ ;
    }
}

class Poly {
    static double dostuff(Shape[] s) {
        double total = 0;
        
        for (int i = 0; i < s.length; i++) {
            //**********Found**********
            total += ________.calcArea();
        }
        return total;
    }
}

空白处解析

  1. 第一个空白处System.out.println("Total Area = " + _________.dostuff(s));

    • 解析:调用Poly类的静态方法dostuff计算总面积
    • 答案:Poly
  2. 第二个空白处_________ class Shape {

    • 解析:Shape类包含抽象方法calcArea(),因此它必须是抽象类
    • 答案:abstract
  3. 第三个空白处_________ = radius;

    • 解析:在构造方法中为私有成员变量radius赋值
    • 答案:this.radius
  4. 第四个空白处public double _________() {

    • 解析:需要实现父类的抽象方法calcArea()来计算面积
    • 答案:calcArea
  5. 第五个空白处return _________ ;

    • 解析:矩形面积计算公式为长×宽
    • 答案:length * width
  6. 第六个空白处total += ________.calcArea();

    • 解析:调用数组中每个形状对象的calcArea()方法
    • 答案:s[i]

完整正确代码

Java多态与抽象类:形状面积计算的面向对象实现

在面向对象编程中,抽象类和多态是实现代码复用和扩展性的重要机制。本文通过一个计算不同形状面积总和的实例,详细讲解抽象类的定义、子类实现以及多态的实际应用。

1. 程序功能概述

这个程序实现了以下功能:

  • 定义一个抽象的形状类Shape,包含计算面积的抽象方法
  • 实现两个具体形状类:Circle(圆形)和Rectangle(矩形)
  • 利用多态特性,在一个形状数组中存储不同类型的形状对象
  • 计算并输出所有形状的面积总和

程序的核心是通过抽象类定义统一接口,通过多态实现不同形状的统一处理。

2. 抽象类的定义与作用

抽象类是一种不能被实例化的类,通常用于定义一组相关类的共同行为。在本例中:

abstract class Shape {
    abstract public double calcArea();
}

Shape类被声明为abstract(抽象类),并包含一个抽象方法calcArea()。抽象方法没有具体实现,必须由子类实现。

抽象类的主要作用:

  • 定义统一接口:所有子类必须实现抽象方法,保证了接口的一致性
  • 代码复用:可以在抽象类中实现一些通用方法,供所有子类使用
  • 类型抽象:可以使用抽象类类型声明变量,引用任何子类对象,为多态奠定基础

3. 子类实现与方法重写

具体的形状类(CircleRectangle)继承自Shape类,并实现了calcArea()方法:

圆形类(Circle
class Circle extends Shape {
    private double radius;
  
    public Circle(double radius) {
        this.radius = radius;
    }
    
    public double calcArea() {
        return radius * radius * 3.14;
    }
}
  • 继承Shape类,必须实现calcArea()方法
  • 实现了圆形面积计算公式:π × 半径²
矩形类(Rectangle
class Rectangle extends Shape {
    private double length, width;

    public Rectangle(double a, double b) {
        length = a;
        width = b;
    }
    
    public double calcArea() {
        return length * width;
    }
}
  • 继承Shape类,实现了calcArea()方法
  • 实现了矩形面积计算公式:长 × 宽

4. 多态的实现与应用

多态是指同一操作作用于不同对象,可以有不同的解释和实现。在本例中体现为:

Shape[] s = new Shape[3];
s[0] = new Circle(5.0);
s[1] = new Rectangle(3.0, 4.0);
s[2] = new Rectangle(5.0, 6.0);
  • 声明了Shape类型的数组,但可以存储Shape的任何子类对象
  • 当调用calcArea()方法时,会根据实际对象类型执行相应的实现

多态的优势:

  • 代码扩展性:添加新的形状(如三角形)只需创建新的子类,无需修改现有代码
  • 代码简化:可以用统一的方式处理不同类型的对象
  • 提高可读性:隐藏了具体实现细节,只关注接口

5. 面积总和计算

Poly类中的静态方法dostuff()实现了面积总和的计算:

class Poly {
    static double dostuff(Shape[] s) {
        double total = 0;
        for (int i = 0; i < s.length; i++) {
            total += s[i].calcArea();
        }
        return total;
    }
}

这个方法展示了多态的强大之处:无论数组中存储的是哪种具体形状,都可以通过统一的calcArea()方法获取面积,无需判断对象的具体类型。

6. 程序运行结果

对于示例中的形状:

  • 圆形(半径5.0)面积:3.14 × 5² = 78.5
  • 矩形(3.0×4.0)面积:3×4 = 12
  • 矩形(5.0×6.0)面积:5×6 = 30

程序运行后输出:

Total Area = 120.5

7. 代码扩展建议

这个程序可以从以下几个方面进行扩展:

  1. 添加更多形状:如三角形、正方形、椭圆形等,只需创建新的子类并实现calcArea()方法
  2. 添加更多功能:在Shape抽象类中添加计算周长的抽象方法calcPerimeter(),在子类中实现
  3. 使用接口替代抽象类:如果不需要在基类中实现通用方法,可以使用接口IShape定义calcArea()方法
  4. 使用集合框架:使用ArrayList<Shape>替代数组,提供更灵活的形状对象管理

通过这个实例,我们学习了抽象类的定义与使用、子类对抽象方法的实现,以及多态在实际编程中的应用。这些面向对象的核心概念对于编写可扩展、可维护的Java程序至关重要。多态机制使得我们可以编写通用的代码来处理不同类型的对象,大大提高了代码的灵活性和复用性。

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