2017-09-17 13 views
-2

誰かが助けてくれれば幸いです。初心者の質問のように思えるが、私はそれを理解することはできない。2次取得/設定メソッド内の変数とgetメソッドの結合Java

私は3つのクラスClass1、Class2、UseClassを持っています。クラス2で

Iは、get/setメソッドを有するclass1で

(コストはこれらの方法の他の場所class1ではなく使用される)

int class1Num; 
final double COST = 120; 

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

Iは、最終的な変数と通常の変数と他の取得/設定メソッドを有します。

Class2はClass1を拡張します。

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()); 
} 

基本的には、私はClass2で行う必要があります。まずClass1のgetNum()メソッドでCOSTを掛け、その合計にFINALNUMを加えます。これは私の最近の試みですが、私はsystem.outにFINALNUMを追加しようとしましたが(何らかの理由で乗算がうまく動作しますが)無駄です。

Display()は、最終結果を出力するためにUseClassで呼び出されます。

は、私はので、私はすべてのヘルプは素晴らしい

おかげだろう

役立つかもしれない、ここで求め考え出しオンライン検索するとき探しているものを他のアイデアではなく、正確に確認を持っていません。

+0

'Class2.setTotalNum()'が問題です。 'Class2.setTotalNum()'が呼び出されてコードがこの契約に違反する前に、あなたは 'Class1.setNum()'を呼び出す必要がある契約を導入します。あなたがスタックトレースを見せたら、それはもっと簡単になるでしょう。 – blafasel

答えて

0

あなたの声明によると、クラスは私が推測する次のとおりです。

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()); 
    } 
} 

問題は、「S etTotalNum(int型class1Num)は」クラス1から継承しclass1Numを割り当てていないということです。 "totalNum = COST * getNum()+ FINALNUM;"の前に "setNum(class1Num);"を呼び出すことができます。

public class Class2 { 
    ... 
    public void setTotalNum(int class1Num) { 
     setNum(class1Num); 
     totalNum = COST * getNum() + FINALNUM; 
    } 
    .... 
} 
関連する問題