// 介面只是用來宣告你會用到什麼方法,所以並不用去實作它
// 在介面裡的方法 預設都是Public和Abstract 所以不必特地加上去
interface Calculator {
long XXX(int x);
// ...
}
// 再來是你的class必須去繼承hw2 所以用extends
// 然後你要實作上面的interface 所以用 implements
public class Progression2_0450742 extends Progression_0450742 implements Calculator {
// 繼承的用法是你可以藉由super去使用hw2的方法以及建構子
// 所以我們可以使用super(m, n)來呼叫hw2的建構子i.e. Progression_0450742(int m, int n)
public Progression2_0450742(final int m, final int n) {
super(m, n);
}
// 因為我們"實作"了 Calculator 所以必須在這個class裡把所有interface裡面宣告的方法都要寫出來
// 我這裡寫的final 可以不用加 這只是遵照checkStyle的習慣而已
// throws 是這禮拜才上到的,所以hw4應該還不用加
public final long sum(final int r) throws ArrayIndexOutOfBoundsException, ArithmeticException {
// 這裡要先檢查輸入進去的 r 有沒有小於0或是大於陣列的上限
// 要獲得陣列的方法有好幾種:
// 1. 因為我們有用繼承,所以可以直接使用super.returnRow來得到陣列的row
// 2. 用this.returnRow也可以
// 3. 如果你的hw2是用public來寫ProgressionArray的話 就可以直接存取使用了(老師說的)
// 在加總的過程中要記得防呆,如果加總後的值小於加總前的值就是overflow了
// 小提示 for each 的用法 快速使用陣列裡的每一個值,row就是returnRow得到的
for (long i : row) { ... }
}
public final double avg(final int r) throws ArrayIndexOutOfBoundsException, ArithmeticException {
// 記得用double
}
}
// hw2
// 因為在同一個檔案 只能有一個public (必須與檔名相同),所以hw2的class前面不用加public
class Progression_0450742 { ... }