【问题标题】:Java Subclass Doesn't Inherit its Parent's Variable [closed]Java子类不继承其父变量[关闭]
【发布时间】:2021-10-07 13:50:17
【问题描述】:

我一直在处理我的项目,但在继承父类的变量时遇到了问题。 这是我的代码:

class function3 {

    double getTh;
    double getTt;
    double getOt;
    
    public void display(String name, String id, double getTh, double getTt, double getOt) {

        this.getTh = getTh;
        this.getTt = getTt;
        this.getOt = getOt;
        
        System.out.println("SALARY INFORMATION");
        System.out.println("-----------------------");
        System.out.println("Employee Id       : " + name);
        System.out.println("Employee Name     : " + id);
        System.out.println("Number of hours   : " + getTh);
        System.out.println("Employee Tardiness: " + getTt);
        System.out.println("-----------------------");

        function4 displayTotal = new function4();
        displayTotal.calcSalary(getOt);
        displayTotal.displaySalary();
    }
    
    
}
class function4 extends function3 {

    double overtimePay;
    double weeklyIncome;
    
    public void calcSalary(double getOvertime) {

        overtimePay = getOvertime * 75.25;
        weeklyIncome = getTh * 200.50;
        
        System.out.println(weeklyIncome);
        
    }

    public void displaySalary() {

        System.out.println("WEEEKLY SALARY");
        System.out.println("-----------------------");
        System.out.println("Overtime Pay : " + overtimePay);
        System.out.println("Weekly Income: " + weeklyIncome);
        System.out.println("Gross Income : ");

    }
}

现在我的问题是,我无法从 function3 访问 getTh 变量,即使它已经扩展。我该怎么办?

【问题讨论】:

  • 我尝试使用 get 方法,但它甚至不起作用。
  • 解释我无法访问 getTh 变量。为什么不?你得到一个编译错误?哪一个?
  • 出于好奇,您是否期望calcSalary 内部的getTh 与父类display 内部的值相同?
  • 是的,我可以访问我无法获取它的值,但它没有显示任何错误
  • @helloWorld 这不是继承的工作方式。您无法访问变量在另一个实例中的 ,即使该另一个实例属于父类。

标签: java inheritance


【解决方案1】:

子类在运行时无法仅通过继承了解其父类的其他实例

子类有自己的变量可以继承,但这只是属性本身,而不是任何定义的运行时值。

如果你想访问另一个实例,你需要组合,而不是继承

class function4 extends function3 {  // maybe not needed to extend anymore 
    public function4(function3 f) {
        this.f3 = f;
   } 
    function3 f3;

然后访问this.f3.getTh

【讨论】:

    【解决方案2】:

    如果你声明变量public会发生什么?默认情况下,在 Java 中,变量被定义为包私有,这意味着它们仅对同一包中的其他类可见,具体取决于您的项目设置方式,这 2 个类(function3 和 function4)可能位于不同的包中。

    此外,随着您在学校的进步(或自学),您会发现允许一个班级直接操纵另一个班级的变量可能会导致问题。坚硬的。是当前设计可用和可维护代码的方法之一。实心的 O 意味着(除其他外)类的 instance variables 不应被类外的函数访问。相反,您应该设计accessorsmutatorsgetterssetters),这是一个示例:

    public class function 3 {
    
      private double Th;
      private double Tt;
      private double Ot;
    
      public double getTh() { return Th; }
      public void setTh(double newTh) { Th = newTh; }
    
      public double getTt() { return Tt; }
      public void setTt(double newTt) { Tt = newTt; }
    
      public double getOt() { return Ot; }
      public void setOt(double newOt) { Th = newOt; }
    
    }
    

    那么如果你想得到Th的值你可以调用<instanceOfFunction3>.getTh()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2016-07-28
      • 1970-01-01
      • 2015-03-14
      相关资源
      最近更新 更多