gpt4 book ai didi

Java - 添加到继承的 JOptionPane

转载 作者:行者123 更新时间:2023-12-02 04:07:39 25 4
gpt4 key购买 nike

大家晚上好!

我认为这里有一些关于继承或 JOptionPane 的问题我不明白,但基本上我想弄清楚如何在 LuxuryCarRental 子类中实际使用新的 JOptionPane。

目前,如果选择为“l”,它会显示 2 个对话框,一个来自父类,一个是我在子类中添加的新对话框。理想情况下我只想要一个对话框。我认为这是我可以在没有 JOptionPane 的情况下完成的事情,但如果可能的话,我想尝试使其与 JOptionPane 一起工作。

我的代码:

CarRental.java(父类)

import javax.swing.JOptionPane;

public class CarRental
{
private String name;
private String zipCode;
private String size;
private double dailyFee;
private int rentalDays;
private double totalFee;

public CarRental(String name, String zipCode, String size, int rentalDays)
{
this.name = name;
this.zipCode = zipCode;
this.size = size;
if (size.equals("e"))
{
dailyFee = 29.99;
}
else if (size.equals("m"))
{
dailyFee = 38.99;
}
else if (size.equals("f"))
{
dailyFee = 43.50;
}
this.rentalDays = rentalDays;
totalFee = dailyFee * rentalDays;
}



public void display()
{
JOptionPane.showMessageDialog(null, "Car for " + name + " from zip code " + zipCode + "\n"
+ "Type = " + size + "\n"
+ "Daily Fee = " + dailyFee + "\n"
+ "Days = " + rentalDays + "\n"
+ "Your rental is $" + totalFee);
}
//includes getters and setters but I didn't include this in this post

LuxuryCarRental.java(子类)

import javax.swing.JOptionPane;

public class LuxuryCarRental extends CarRental
{
public LuxuryCarRental(String name, String zipCode, String size, int rentalDays)
{
super(name, zipCode, size, rentalDays);
if (size.equals("l"))
{
this.setDailyFee(79.99);
String includeChauffeur;
includeChauffeur = JOptionPane.showInputDialog(null, "Include chauffeur? Y/N");
if (includeChauffeur.equals("Y") || includeChauffeur.equals("y"))
{
this.setDailyFee(279.99);
this.setTotalFee(this.getDailyFee()*this.getRentalDays());
JOptionPane.showMessageDialog(null, "Chauffeur @ $200/day = $" + 200 * this.getRentalDays());
}
}
}
}

UserCarRental.java(驱动程序类)

import javax.swing.JOptionPane;

public class UseCarRental
{

public static void main(String[] args)
{
String name = JOptionPane.showInputDialog("Enter name");
String zip = JOptionPane.showInputDialog("Enter zip code");
String size = JOptionPane.showInputDialog("Enter type of car" + "\n" + "e - economy" + "\n" + "m - midsize" + "\n" + "f - full" + "\n" + "l - luxury");
int days = Integer.parseInt(JOptionPane.showInputDialog("Enter days to rent"));

CarRental userInfo = new LuxuryCarRental(name, zip, size, days);

userInfo.display();
}
}

任何帮助将不胜感激!

最佳答案

我认为这里的教训是不要将 UI 代码与模型代码混合在一起。了解您的 CarRental 类及其所有子类都是逻辑类或模型类,并且在这里可以将其视为对物理或逻辑现实进行建模的类。它们应该以此能力使用,并且应该编写为可以将信息传递给它们并从中提取信息,但它们不应该直接与用户交互。相反,这是 UI(用户界面)类的责任,这里它非常简单,只有您的 main 方法。因此,我建议您从 CarRental 和 LuxeryCarRental 中获取 JOptionPane 调用,并在从 CarRental 对象中提取状态后在主方法中显示 JOptionPane。

否则,如果您绝对必须让模型类显示其信息,请使用可以完全重写的方法来执行此操作。事实上,您可以让您的子类重写 display() 方法,然后在那里打印出其数据。

关于Java - 添加到继承的 JOptionPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34100885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com