【问题标题】:Confused regarding parameters and constructors in Java对Java中的参数和构造函数感到困惑
【发布时间】:2020-10-21 12:14:40
【问题描述】:

所以基本上,我有一个任务,我有很多不同的事情要做。我被困在这部分,我必须创建三个不同的构造函数,它们采用不同的参数。

参数:

  1. 为所有 4 个字段获取参数 - 我想我在下面的构造函数中做了。
  2. 地址行 1-3 和邮政编码的一个参数。
  3. 地址行 1 和 2 以及邮政编码的参数。

我试过用不同的参数制作不同的构造函数,但它不起作用,所以任何对此的见解将不胜感激。

class Address{

    private String addressLine1;
    private String addressLine2;
    private String addressLine3;
    private String addressLine4;
    private String postcode;

    public Address(String allFields){
        this.addressLine1 = allFields;
        this.addressLine2 = allFields;
        this.addressLine3 = allFields;
        this.addressLine4 = allFields;
        
        
     }
}

编辑:这是关于这个练习阶段的原始问题。

  1. 为类提供三个不同的构造函数:一个为所有四个字段获取参数,一个为仅地址行 1-3 和邮政编码获取参数,一个为仅地址行 1 和 2 以及邮政编码获取参数。省略某些字段的构造函数应将这些字段设置为包含空字符串值“”。

谢谢。

【问题讨论】:

  • 可以定义多个不同参数的构造函数,但是如果(2)和(3)都期望两个字符串参数,就不能区分了。
  • 我不认为你解决 1. 的方式是正确的,毕竟它说构造函数应该为所有 4 个字段采用 "parameters" (复数),而不是分配给所有字段的单个参数。
  • 你所做的没有任何意义。因为你正在为所有addressLine属性初始化相同的值。我认为你需要一个具有多个参数的构造函数。(关于实现的构造函数)
  • 您是否按字面复制了构造函数的要求?或者该列表是否部分反映了您对作业的理解?因为您的问题中给出的措辞导致了相当高级的作业,这可能不是您的讲师的意图。如果我是对的,请随时在问题中添加原始措辞。
  • '_..all 4 fields" 有点令人困惑,因为 Address 对象实际上有 五个 字段(四个地址行和邮政编码)。

标签: java parameters constructor


【解决方案1】:
  1. 为所有 4 个字段获取参数 - 我想我在下面的构造函数中做了。
    public Address(String addressLine1, String addressLine2, String addressLine3, String addressLine4){
       this.addressLine1 = addressLine1;
       this.addressLine2 = addressLine2;
       this.addressLine3 = addressLine3;
       this.addressLine4 = addressLine4;
    }
  1. 地址行 1-3 和邮政编码的一个参数。

public Address(String addressLine1, String addressLine2, String addressLine3, String postCode){
       this.addressLine1 = addressLine1;
       this.addressLine2 = addressLine2;
       this.addressLine3 = addressLine3;
       this.postCode = postCode;
    }

  1. 地址行 1 和 2 以及邮政编码的参数。

public Address(String addressLine1, String addressLine2, String postCode){
           this.addressLine1 = addressLine1;
           this.addressLine2 = addressLine2;    
           this.postCode = postCode;
        }

【讨论】:

    【解决方案2】:

    根据您的原始问题答案应该如下所示。在您的原始问题中,它说要实现“一个为所有四个字段都带参数的字段”所以 我会将这四个字段视为 adressLine 字段,因为已经有 5 个字段可用,包括邮政编码字段。

    额外:请在命名变量时遵循Java中的命名约定。例如:邮政编码应为邮政编码,尽量避免变量名中的数字

    public Address(String addressLine1, String addressLine2, String addressLine3, String addressLine4){//Here I considered the four fields as addressLine attributes
           this.addressLine1 = addressLine1;
           this.addressLine2 = addressLine2;
           this.addressLine3 = addressLine3;
           this.addressLine4 = addressLine4;
           this.postcode ="";
        }
    
    public Address(String addressLine1, String addressLine2, String addressLine3, String postcode){
           this.addressLine1 = addressLine1;
           this.addressLine2 = addressLine2;
           this.addressLine3 = addressLine3;
           this.addressLine4 = "";
           this.postcode = postcode;
        }
    
    
    public Address(String addressLine1, String addressLine2, String postcode){
               this.addressLine1 = addressLine1;
               this.addressLine2 = addressLine2; 
               this.addressLine3 = "";
               this.addressLine4 = "";
               this.postcode = postcode;
            }
    
    

    【讨论】:

      【解决方案3】:

      根据您的问题,您将在所有构造函数中使用set value to all variables。对于这种调用内部构造函数的场景,Java 提供了一个方法this()。因此,以下应该是正确的组合。

      class Address{
          private String addressLine1;
          private String addressLine2;
          private String addressLine3;
          private String addressLine4;
          private String postcode;
      
          //1. one which takes parameters for only address lines 1 and 2 and the postcode
          public Address(String addressLine1, String addressLine2, String postCode){
              this(addressLine1, addressLine2, "", postCode);
          }
      
          //2. one which takes parameters for only address lines 1-3 and the postcode
          public Address(String addressLine1, String addressLine2, String addressLine3, String postCode){
              this(addressLine1, addressLine2, addressLine3, "");
              this.postcode = postCode;
          }
              
          //3. one which takes parameters for all four fields, 
          public Address(String addressLine1, String addressLine2, String addressLine3, String addressLine4){
             super();
             this.addressLine1 = addressLine1;
             this.addressLine2 = addressLine2;
             this.addressLine3 = addressLine3;
             this.addressLine4 = addressLine4;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-12
        • 2014-08-13
        相关资源
        最近更新 更多