首页 > 解决方案 > 我父母的类方法没有收到我的实例变量值

问题描述

我正在做一个脂肪百分比计算器,我正在扩展男士计算器,因为它具有基本相同的功能。发生的情况是我没有从女子班(父级)添加脂肪计算方法来尝试保存一些代码,但是当我创建男子班的实例并使用 fat 方法时,它没有收到我的值从男子班的一个方法得到。如果你能解释为什么我会很感激。


public class DC_Calculator_Women implements DC_Fat_Calculator{
   private int age;
   private int total_Pliegues;
   private double DC;
   protected double fatPercentage;
   public DC_Calculator_Women(int age, int total_Pliegues) {
       this.age = age;
       this.total_Pliegues = total_Pliegues;

   }
   public double calculateDC() {
       // •    Mujeres: Densidad Corporal (DC) = 1.0994921 – (0.0009929 × Suma Pliegues) + (0.0000023 × Suma Pliegues al Cuadrado) – (0.0001392 × Edad)

       DC = 1.0994921 - (0.0009929 * total_Pliegues) + (0.0000023 * (total_Pliegues * total_Pliegues)) - (0.0001392 * age);
       return DC;

   }
   public double calculateFat() {
       // •    (%G) = [(4.95/Densidad Corporal) – 4.5] × 100
       fatPercentage = ((4.95 / DC) - 4.5) * 100;
       System.out.println(DC);
       return fatPercentage;
   }


}

public class DC_Calculator_Men extends DC_Calculator_Women{
   private int age;
   private int total_Pliegues;
   private double DC;

   public DC_Calculator_Men(int age, int total_Pliegues) {
       super(age, total_Pliegues);
       this.age = age;
       this.total_Pliegues = total_Pliegues;
   }

   @Override
   public double calculateDC() {
       // •    Hombres: Densidad Corporal (DC) = 1.1093800 – (0.0008267 × Suma Pliegues) + (0.0000016 × Suma Pliegues al Cuadrado) – (0.0002574 × Edad)
       DC =  1.1093800 - (0.0008267 * total_Pliegues) + (0.0000016 * (total_Pliegues * total_Pliegues) - (0.0002574 * age));
       return DC;
   }

}


public class Main {
   public static void main(String[] args) {
       double DC;
       double fat;

       // Women
       DC_Calculator_Women Wtest1 = new DC_Calculator_Women(25, 51);
       DC = Wtest1.calculateDC();
       fat = Wtest1.calculateFat();

       System.out.printf("Women (DC): %5.2f\n", DC);
       System.out.printf("Women (fat): %5.2f\n", fat);

       // Men
       DC_Calculator_Men Mtest1 = new DC_Calculator_Men(35, 40);
       DC = Mtest1.calculateDC(); // **** DC in this method counts as 0 ***
       fat = Mtest1.calculateFat();

       System.out.printf("Men (DC): %5.2f\n", DC);
       System.out.printf("Men (fat): %5.2f\n", fat);

   }
}


标签: javainheritancemethods

解决方案


BUG:在子(男)类计算的 DC 值在父(女)类无法访问。

因此,每次子类使用父类的calculateFat()时,所引用的DC变量的值都是父类(未初始化,这是 0.0)

解决方案:我创建了一个 setter 方法 setWomenDC(double DC),用于在 parent(women) 类中设置 DC 的值。这将由 child(men) 类使用,同时为自身计算 DC 的值。使用它,它将在父(女性)类中为 DC 设置相同的值。

将此方法添加到 DC_Calculator_Women 类

//add this method to receive DC value from child(men) class
public void setWomenDC(double DC){
    this.DC = DC;
}

在 DC_Calculator_Men 类中编辑 calculateDC() 方法

@Override
public double calculateDC() {
    // •    Hombres: Densidad Corporal (DC) = 1.1093800 – (0.0008267 × Suma Pliegues) + (0.0000016 × Suma Pliegues al Cuadrado) – (0.0002574 × Edad)
    DC =  1.1093800 - (0.0008267 * total_Pliegues) + (0.0000016 * (total_Pliegues * total_Pliegues) - (0.0002574 * age));
    setWomenDC(DC); //CHANGED HERE: pass the value DC to parent class
    return DC;
}   

解决方案 2

将DC_Calculator_Women类中DC的访问修饰符设为protected

并且,从DC_Calculator_Men类中删除DC变量声明

现在,运行程序

在这里,我们让子类使用 Parent 类的变量


推荐阅读