【问题标题】:Proper syntax for super()?super() 的正确语法?
【发布时间】:2013-12-20 06:07:19
【问题描述】:

当我使用 super() 来使用超类方法时,返回的正确方法是什么?

假设我有一个每小时一堂课。它包含一个也称为 Hourly 的构造函数,具有参数“字符串名称”和“双倍速率”。UML 版本如下所示:

+每小时(名称:字符串,费率:双倍)

然而,“name”变量是Employee类的私有属性,类hourly是通过继承关联的。我的意思是,UML 显示一个清晰的箭头(不是菱形),从 Hourly 类指向 Employee 类。

如何编写构造函数 Hourly???

我有一个基本的骨架:

public Hourly(String name, double rate){


}

请帮我填写。

另外,假设方法中有返回值。假设我想返回double rate。返回一些使用 super() 的正确语法是什么,因为我知道我不能简单地使用:

return this.rate;

【问题讨论】:

  • Employee 超类公开了哪些构造函数和访问器(“getter”)方法?
  • getPay() 和 printPay(date:int) 两者都没有多大帮助
  • 如果 Hourly 是 Employee 的子类,并且如果您想将名称解析为超类 (Employee),则在您的 Hourly 构造函数中调用 super(name);
  • 你能用代码回答一下吗?
  • Employee类中是否有name的setter,还是在构造函数中?

标签: java superclass


【解决方案1】:

您的Employee 肯定有名字。

private String name;

public Employee(String name) {
    this.name = name;
}

然后,您的Hourly 也必须有一个名称。由于HourlyEmployee,因此您也必须在其上设置名称。就这样完成了。

public Hourly(String name, double rate) {
    super(name);
    this.rate = rate;
}

【讨论】:

    【解决方案2】:

    根据您的 cmets,名称由超类存储;率不是。因此,您应该将 rate 存储在您定义的 Hourly 类中,同时将 name 传递给超级构造函数,如下所示:

    public class Hourly {
    
      private double rate;
    
      public Hourly(String name, double rate) {
        super(name);
        this.rate = rate;
      }
    
      public double getRate() {
        return rate;
      }
    }
    

    【讨论】:

      【解决方案3】:

      如果 Hourly 是 Employee 的子类,并且如果您想将名称解析为超类 (Employee),则在您的 Hourly 构造函数中调用 super(name);

      public Hourly(String name, double rate){
          super(name);
      }
      

      【讨论】:

        【解决方案4】:

        Hourly extends Employee:

            class Hourly extends Employee {
        
            private int rate;
        
            public Hourly(String name, int rate) {
              super(name);  //assuming Employee has this constructor
              this.rate = rate;
            }
        
            //this make sense if name is protected and doesn't have getter in base class
            //ideally you would have this in base class itself
            public String getName() {
               return super.name; //for rate there is no sense in using super as it is not known to super class
            }
            }
        

        【讨论】:

          猜你喜欢
          • 2015-09-29
          • 1970-01-01
          • 2011-09-26
          • 2019-11-26
          • 1970-01-01
          • 2017-06-22
          • 2011-08-21
          • 2016-12-28
          • 1970-01-01
          相关资源
          最近更新 更多