【问题标题】:How to call a method with parameters as objects from another class java?java - 如何调用带有参数的方法作为另一个类java的对象?
【发布时间】:2021-03-04 23:50:24
【问题描述】:

我试图不只是通过手动输入值来调用该方法,而是从另一个类运行另一个类的方法。我试图通过查看类似的问题来找出解决方案,但在这种情况下它们对我没有帮助。

我可能错了,请见谅,但是这个要求是要求我调用一个带参数的方法,我不明白该怎么做。

这是要求:

a) 将方法 payForHoliday() 添加到 Member 类。该方法将简单地调用网站类中的方法来支付假期费用(即记录与网站的交易)。这里我们遇到了一个问题,因为 Member 类的对象没有记录该成员登录到哪个网站。

网站

public class Website {
    private String websiteName;
    private double salesTotal;
    
    public Website(String newWebsiteName)
    {
        websiteName = newWebsiteName;
    }

    // lines omitted

    public void checkout(Member purchase, Holiday chosen) 
    {
        if (checkHitDiscount() == true)
        {
            System.out.println("Congrtulations you are eligible for 10% discount!");
            salesTotal = chosen.price;
        }
        else
        {
            System.out.println("successful completion of the transaction");
            salesTotal = chosen.price;
        }
    }

班级成员

public class Member {
    private String email;
    public int membershipNumber;
    Holiday holiday;
    Website website;

    public Member(String newEmail, int newMembershipNumber)
    {
        email = newEmail;
        membershipNumber = newMembershipNumber;
    }

    // lines omitted

    public void payForHoliday(Member purchase, Holiday chosen) 
    {
         // This method needs to run the "checkout()" method in Website class
    }

【问题讨论】:

    标签: java object methods call


    【解决方案1】:

    在您可以执行另一个类的(非静态)成员之前,您需要一个作为该类实例的对象。

    换句话说,您的结帐方法是一种特定网站上操作的操作,因为它被定义为 Website 类的成员。

    因此,你需要调用它

        Website xyz = …. something that delivers a website …;
    

    然后你就可以打电话了

        xyz.checkout(…);
    

    “提供网站的东西”是适合您的应用程序设计的任何东西。也许它就像“new Website()”一样简单,但如果不知道网站在您的设计中实际代表什么,就无法判断。


    您缺少有关它应该如何工作的详细信息。我会提供一些猜测。首先,我假设网站的成员更多,也就是说,每个可能的网站都有不止一个成员。

    这意味着需要有一种方法可以将会员连接到网站。要求指出这是一个“问题”——我们可以推断您应该解决这个问题。

    一种方法是让 Member 构造函数告诉你网站:

    public Member(String newEmail, int newMembershipNumber, Website newSite)
    {
        email = newEmail;
        membershipNumber = newMembershipNumber;
        website = newSite;
    }
    

    那么你可以这样做:

    public void payForHoliday(Member purchase, Holiday chosen) 
    {
         website.checkout(purchase, chosen);
    }
    

    但这对我来说没有多大意义——为什么这个方法需要一个与包含它的成员不同的“成员”参数?你确定你有这个细节吗?这个比较靠谱:

    public void payForHoliday(Holiday chosen) 
    {
         website.checkout(this, chosen); // 'this' means the current Member
    }
    

    但是,我们不能说这是否是预期的方法,因为问题中没有足够的细节。这些东西是如何使用的?什么创造了会员?创建会员的代码是否知道它为其创建会员的特定网站?

    【讨论】:

    • 我已经尝试过这种方式,它需要我添加一个字符串,因为我在 Website 类中有一个构造函数来初始化网站的名称。问题是这样的,我不想解决其他变量,而只是 Website 类中的checkout() 方法,至少是要求所要求的。
    • @The_Liner 你确定这是要求吗?该方法只能从Website 类的实例中调用。如果为了构建该实例,您需要提供一个字符串,我非常怀疑该要求是否会要求您不提供该字符串。实际上,该要求仅在说Member 类不跟踪它时才提到网站的名称,但它并没有说您不应该以某种方式提供它,例如通过用户的输入。如果可能的话,也许你应该要求给你分配任务的人澄清一下。
    • 我通过包含字段和构造函数来更新问题。我已经在Member 类(网站网站)中添加了Website 类作为实例变量
    • Member 中的某些内容需要将网站分配给实例变量。然后你可以调用 website.checkout(….)。
    • 我什么都试过了,我不知道该怎么办。他从未教过我们如何调用 mutator 方法,而只教过 accessor 方法。
    【解决方案2】:

    问题是我试图添加同一个类Member 的对象来调用另一个类Website 的方法,该类具有Member purchase 作为参数。

    所以为了正确调用该方法,我使用了以下代码:

        public void payForHoliday(Holiday test) 
        {
           website.checkout(this, test);
        }
    
    • 为了指向Website 类中的checkout() 方法,我在Member 类中使用了address(网站网站)声明为instance variable

    • this 关键字告诉程序参数是对象本身,它正在调用方法。

    • test 变量被放置为参数,因为它是来自另一个类的指针。 (为了避免和checkout()方法中的那个冲突,我把变量名改成了别的名字)

    【讨论】:

      猜你喜欢
      • 2012-06-07
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 2015-02-07
      • 2022-01-25
      相关资源
      最近更新 更多