首页 > 编程语言 >【java笔记】 5 接口使用举例

【java笔记】 5 接口使用举例

时间:2024-09-26 13:19:57浏览次数:9  
标签:java double 接口 形状 举例 半径 Circle public ShapeInterface

在这里插入图片描述

// 导入Swing库中的消息对话框组件
import javax.swing.*;

// 定义一个Circle类,该类实现了ShapeInterface接口
public class Circle implements ShapeInterface {
// 定义一个私有变量radius来保存圆的半径
private double radius;

// 默认构造函数,初始化一个半径为0的圆
public Circle() {
    setRadius(0);
}

// 带参数的构造函数,初始化一个具有指定半径的圆
public Circle(double r) {
    setRadius(r);
}

// 设置半径的方法,确保半径总是非负数
public void setRadius(double r) {
    // 如果输入的半径为负数,则取其绝对值
    this.radius = r < 0 ? -r : r;
}

// 计算并返回圆的面积
public double area() {
    // 使用圆面积公式π * r^2
    return Math.PI * radius * radius;
}

// 计算并返回圆的体积,由于圆是二维的,这里总是返回0
public double volume() {
    return 0;
}

// 返回形状的名字,这里返回的是一个代表圆的字符
public String getName() {
    // 这里返回的是一个字符 "Բ",可能需要根据实际情况修改为更合适的名字
    return "Բ";
}

// 主函数,程序的入口
public static void main(String[] args) {
    // 创建一个半径为22的圆实例
    Circle circle = new Circle(22);

    // 初始化一个空字符串用于构建输出信息
    String output = "\n";

    // 构建输出信息字符串
    output += circle.getName() + "\n"
            + circle.toString() + "\n面积=" + circle.area()
            + "\n体积=" + circle.volume();

    // 显示一个包含输出信息的消息对话框
    // 标题应该是中文的 "圆的信息",这里需要修正乱码问题
    JOptionPane.showMessageDialog(
            null, output, "圆的信息",
            JOptionPane.INFORMATION_MESSAGE);
}

}

// 定义一个ShapeInterface接口,所有实现此接口的类都必须提供以下方法
public interface ShapeInterface {
// 计算并返回形状的面积
public double area();

// 计算并返回形状的体积(对于二维形状,可以返回0)
public double volume();

// 返回形状的名字
public String getName();

}

设计思路

这段代码的主要目的是定义一个圆的类 Circle,该类实现了 ShapeInterface 接口,提供了计算面积和体积的方法,并且能够显示圆的信息。

接口 ShapeInterface

首先,我们定义了一个接口 ShapeInterface,它包含了三个方法:

  1. area():计算形状的面积。
  2. volume():计算形状的体积(对于二维形状,这个方法通常返回0)。
  3. getName():返回形状的名称。

Circle

接着,我们定义了一个具体的类 Circle,它实现了上述接口。

属性
  • private double radius:用于存储圆的半径。
构造函数
  • public Circle():默认构造函数,初始化一个半径为0的圆。
  • public Circle(double r):带参数的构造函数,初始化一个具有指定半径的圆。
方法实现
  • public void setRadius(double r):设置圆的半径,并确保半径总是非负数。
  • public double area():根据圆的半径计算并返回圆的面积。
  • public double volume():对于圆这样的二维形状,体积概念不适用,因此这个方法总是返回0。
  • public String getName():返回圆的名称。在这个例子中返回了一个字符 “Բ”,实际应用中应该返回更具描述性的名称。
主函数 main
  • public static void main(String[] args):这是程序的入口点。在这个方法中,创建了一个半径为22的圆实例,并构建了一个字符串 output 来展示圆的相关信息。
  • 使用 JOptionPane.showMessageDialog 显示一个包含圆的信息的消息对话框。

分析与改进

代码分析
  1. 接口定义ShapeInterface 提供了通用的几何形状方法,使得不同的形状可以遵循相同的行为模式。
  2. 类定义Circle 实现了 ShapeInterface 接口,并且添加了必要的属性和逻辑来描述圆的特征。
  3. 构造函数:构造函数确保可以创建不同半径的圆实例,并且默认构造函数初始化一个半径为0的圆。
  4. 方法实现setRadius 方法保证半径非负;area 方法计算圆的面积;volume 方法对于圆没有实际意义,返回0;getName 方法返回圆的名称。
主函数

主函数创建了一个半径为22的圆实例,并展示了圆的信息。使用 JOptionPane 可以方便地在GUI环境中显示信息。

改进建议
  1. getName() 方法:建议返回更具描述性的名称,例如 “Circle” 或者 “圆形”。
  2. 消息对话框标题:将 "��\" 替换为正确的中文标题,例如 "圆的信息"
  3. 输出信息格式化:可以考虑使用更清晰的格式来展示输出信息,比如使用 String.format 方法来格式化字符串。

改进后的 main 方法示例

public static void main(String[] args) {
    Circle circle = new Circle(22);

    // 构建输出信息字符串
    String output = String.format("\n形状名称:%s\n面积:%.2f\n体积:%.2f",
            circle.getName(), circle.area(), circle.volume());

    // 显示一个包含输出信息的消息对话框
    JOptionPane.showMessageDialog(
        null, output, "圆的信息",
        JOptionPane.INFORMATION_MESSAGE);
}

总结

通过以上分析,我们可以看到这段代码实现了一个简单的几何形状类 Circle,并且通过继承接口 ShapeInterface 来保持代码的可扩展性和一致性。改进后的代码提高了可读性和用户体验,使得输出信息更加清晰明了。

扩展设计思路

多个形状的支持

既然已经有了 ShapeInterface 接口,我们可以考虑支持更多的形状。例如,可以定义 RectangleTriangle 等类,并让它们实现 ShapeInterface 接口。这将使程序变得更加通用,并且可以通过接口实现多态性。

抽象类或基类

为了减少代码重复,可以考虑创建一个抽象类 AbstractShape,它实现 ShapeInterface 接口,并提供一些通用的方法或属性,如 getName()。然后,所有的具体形状类(如 CircleRectangle 等)都可以继承自这个抽象类。

GUI 支持

目前的程序只是简单地显示了一个消息对话框,显示了形状的信息。如果要构建一个完整的图形用户界面(GUI)应用程序,可以考虑使用 Swing 或 JavaFX 来创建一个窗口,允许用户选择形状类型、输入尺寸等,并动态显示形状的属性。

示例:添加 Rectangle 类

让我们添加一个矩形类 Rectangle 并让它实现 ShapeInterface 接口:

public class Rectangle implements ShapeInterface {
    private double width;
    private double height;

    public Rectangle() {
        this.width = 0;
        this.height = 0;
    }

    public Rectangle(double w, double h) {
        setWidth(w);
        setHeight(h);
    }

    public void setWidth(double w) {
        this.width = w > 0 ? w : 0; // 确保宽度非负
    }

    public void setHeight(double h) {
        this.height = h > 0 ? h : 0; // 确保高度非负
    }

    @Override
    public double area() {
        return width * height;
    }

    @Override
    public double volume() {
        return 0; // 矩形是二维的,所以体积为0
    }

    @Override
    public String getName() {
        return "Rectangle"; // 返回矩形的名称
    }
}

示例:使用 JavaFX 构建 GUI

如果您想构建一个简单的 GUI 应用程序来选择形状并显示相关信息,可以使用 JavaFX。下面是一个简化的示例,演示如何创建一个基本的 JavaFX 应用程序:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ShapeApp extends Application {

    private ShapeInterface shape;

    @Override
    public void start(Stage primaryStage) {
        Label radiusLabel = new Label("半径:");
        TextField radiusField = new TextField();
        Button createButton = new Button("创建圆");

        createButton.setOnAction(e -> {
            try {
                double radius = Double.parseDouble(radiusField.getText());
                shape = new Circle(radius);
                showShapeInfo();
            } catch (NumberFormatException ex) {
                System.out.println("请输入有效的数字");
            }
        });

        VBox layout = new VBox(radiusLabel, radiusField, createButton);
        Scene scene = new Scene(layout, 200, 250);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void showShapeInfo() {
        System.out.println("形状名称: " + shape.getName());
        System.out.println("面积: " + shape.area());
        System.out.println("体积: " + shape.volume());
    }

    public static void main(String[] args) {
        launch(args);
    }
}

在这个示例中,我们创建了一个简单的 JavaFX 应用程序,允许用户输入圆的半径,并创建一个 Circle 对象。当用户点击“创建圆”按钮时,会创建一个圆对象,并在控制台中显示圆的信息。

总结

通过这些扩展,我们可以看到,从简单的控制台应用程序到具有图形用户界面的完整应用程序,逐步增加了功能并改善了用户体验。同时,通过接口和抽象类,代码的可维护性和扩展性也得到了提高。未来还可以继续添加更多功能,如支持更多的形状类型、增加图形绘制能力等。

标签:java,double,接口,形状,举例,半径,Circle,public,ShapeInterface
From: https://blog.csdn.net/shaozheng0503/article/details/142553395

相关文章

  • ECMAScript 和 JavaScript 的区别
    ECMAScript和JavaScript有以下区别:一、概念性质不同ECMAScript:是一种标准化的脚本语言规范,它规定了脚本语言的语法、类型、语句、关键字、保留字、操作符和对象等核心内容。它不依赖于任何特定的运行环境,只是一个纯粹的语言规范文档。JavaScript:是一种具体的编程语言,由......
  • Java高效编程(1):使用静态工厂方法替代构造函数
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在Java编程中,传统上,类允许客户端获取实例的方式是提供一个公共构造函数。然而,还有一种重要的技术,应该成为每个程序员工具箱中的一部分,那就是使用公共的静态工厂方法。静态工厂方法是一个静态方法,返回类的实例。这......
  • Java高效编程(2):面对多个构造参数时考虑使用构建器模式
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在Java编程中,静态工厂和构造函数都存在一个局限性:当可选参数数量较多时,它们的扩展性较差。以表示食品包装上营养成分标签的类为例,这些标签包含几个必需字段——如份量大小、每容器的份数和每份的卡路里——以及超......
  • Java线程池详解
    目录前言线程池概述线程池的实现线程池的构造拒绝策略任务队列线程池的工作原理线程池的监控Executors线程池工厂自定义线程池使用线程池的好处应用场景总结本文详细探讨了线程池在并发编程领域的应用,介绍了ThreadPoolExecutor的核心组件、工作原理,线程池的构造......
  • 基于Java+SpringBoot+Mysql陪练系统功能设计与实现一
    一、前言介绍:1.1项目摘要随着互联网技术的飞速发展和普及,网络游戏已成为人们休闲娱乐的重要方式之一。随着游戏玩家群体的不断扩大,游戏内竞争日益激烈,许多玩家为了提升游戏技能、快速升级或享受游戏乐趣,开始寻求外部帮助,如寻找高水平玩家进行陪玩或雇佣代练服务。这一需......
  • 基于Java+SpringBoot+Mysql陪练系统功能设计与实现二
    一、前言介绍:1.1项目摘要随着互联网技术的飞速发展和普及,网络游戏已成为人们休闲娱乐的重要方式之一。随着游戏玩家群体的不断扩大,游戏内竞争日益激烈,许多玩家为了提升游戏技能、快速升级或享受游戏乐趣,开始寻求外部帮助,如寻找高水平玩家进行陪玩或雇佣代练服务。这一需......
  • JavaScript简介及示例
                                                JavaScript简介及使用 一、简介JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为Ja......
  • PTA JAVA语言 6-1 数字翻转
    6-1数字翻转分数10全屏浏览切换布局作者 Ma单位 山东科技大学现需要编写一个方法publicstaticintrNum(intnum)用于对用户输入的三位数进行翻转。裁判测试程序样例:importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){......
  • 三大硬核方式揭秘:Java如何与底层硬件和工业设备轻松通信!
    大家好,我是V哥,程序员聊天真是三句不到离不开技术啊,这不前两天跟一个哥们吃饭,他是我好多年前的学员了,一直保持着联系,现在都李总了,在做工业互联网相关的项目,真是只要Java学得好,能干一辈子,卷死的是那些半吊子。感谢李总给我分享了工业互联网项目的事情,收获很多,今天的内容来聊一......
  • Java计算正方形
    publicclassSquareArea{//声明一个常量,用于表示正方形的边长publicstaticfinaldoubleSIDE_LENGTH=5.0;publicstaticvoidmain(String[]args){//声明一个局部变量来存储计算得到的面积doublearea;//调用calculateArea方法,并将结果赋值给局部......