2017-09-17 2 views
-2

Je vous serais reconnaissant si quelqu'un pouvait vous aider. Juste ce qui semble être une question novice mais je ne peux pas le comprendre.Combinaison de la méthode get avec des variables à l'intérieur d'une méthode get/set secondaire Java

J'ai 3 classes Class1, Class2, UseClass.

Dans Class1 J'ai un get/méthode set (COST est utilisé ailleurs dans Class1 mais pas dans ces méthodes)

int class1Num; 
final double COST = 120; 

public int getNum() 
{ 
    return class1Num; 
} 
public void setNum(int newNum) 
{ 
    class1Num = newNum; 
} 

Dans Classe2 J'ai une dernière variable et une variable normale et une autre get/méthode set .

Classe 2 étend la classe 1.

final double FINALNUM = 50; 
double totalNum; 

public double getTotalNum() 
{ 
    return totalNum; 
} 
public void setTotalNum(int class1Num) 
{ 
    totalNum = COST * getNum() + FINALNUM; 
} 

public void display() 
{ 
    System.out.println("Final Number: " + getTotalNum()); 
} 

Fondamentalement ce que j'ai besoin de faire est que je dois dans Class2. Commencez par multiplier COST par la méthode getNum() de Class1, puis ajoutez FINALNUM à ce total. Ceci est juste ma tentative récente, mais j'ai essayé d'ajouter FINALNUM dans le system.out en vain (bien que la multiplication fonctionne bien pour une raison quelconque). Display() est appelée dans la classe UseClass pour afficher le résultat final.

Je n'ai pas d'autres idées et pas exactement ce que je suis à la recherche lors de la recherche en ligne alors je me suis demander ici peut aider

Toute aide serait grande

Merci.

+0

'Class2.setTotalNum()' est le problème. Vous introduisez un contrat qui nécessite d'appeler 'Class1.setNum()' avant que 'Class2.setTotalNum()' soit appelé et que votre code enfreigne ce contrat. BTW ce serait plus facile si vous montriez le stacktrace. – blafasel

Répondre

0

Selon vos déclarations, les classes suivent, je suppose:

public class Class1 { 
    int class1Num; 
    final double COST = 120; 

    public int getNum() 
    { 
     return class1Num; 
    } 

    public void setNum(int newNum) 
    { 
     class1Num = newNum; 
    } 
} 

public class Class2 extends Class1{ 
    final double FINALNUM = 50; 
    double totalNum; 

    public double getTotalNum() 
    { 
     return totalNum; 
    } 

    public void setTotalNum(int class1Num) 
    { 
     // Note: need assign field member "class1Num" inherited from Class1. 
     // Otherwise, it will be zero and cause incorrect value of getNum() 
     totalNum = COST * getNum() + FINALNUM; 
    } 

    public void display() 
    { 
     System.out.println("Final Number: " + getTotalNum()); 
    } 
} 

Le problème est que "s etTotalNum (int class1Num)" n'attribue pas class1Num qui a hérité de Class1. Vous pouvez appeler "setNum (class1Num);" avant "totalNum = COST * getNum() + FINALNUM;"

public class Class2 { 
    ... 
    public void setTotalNum(int class1Num) { 
     setNum(class1Num); 
     totalNum = COST * getNum() + FINALNUM; 
    } 
    .... 
}