class Max int calc int a int sum

  • Slides: 21
Download presentation

メソッドの一部の再利用 • 切り出したメソッドをサブクラスで上書き • メソッドの一部分を変更 – 実際は難しい class Max { int calc (int[] a)

メソッドの一部の再利用 • 切り出したメソッドをサブクラスで上書き • メソッドの一部分を変更 – 実際は難しい class Max { int calc (int[] a) { int sum = 0; int max = a[0]; int average; for (int i = 0; . . ) { calc. Sum(sum, max, i, a); } average = sum / a. length; return max – average; } } class Min extends Max { void calc. Sum(int sum, int max, int i, int[] a) { sum =. . } } 3

提案:上書き可能なメソッド内メソッド • ローカル変数にアクセス可能 • サブクラスで上書き可能 class Max { int calc (int[] a) { public

提案:上書き可能なメソッド内メソッド • ローカル変数にアクセス可能 • サブクラスで上書き可能 class Max { int calc (int[] a) { public int max, . . for(int i=0; . . ) { void calc. Sum( class Min extends Max { int[] a, int i) { void calc (int[]). sum += a[i]; calc. Sum(int[] a, int i) { 上書き if (max < a[i]) sum += a[i]; max = a[i]; if (max > a[i]) } max = a[i]; calc. Sum(a, i); } } } : } } 5

public 変数 • 上書き後はpublic変数だけが参照、代入可能 – 非public変数は参照も代入も不可 – カプセル化 class Max { int calc (int[]

public 変数 • 上書き後はpublic変数だけが参照、代入可能 – 非public変数は参照も代入も不可 – カプセル化 class Max { int calc (int[] a) { public int sum = 0; public int max = a[0]; int ave; for(int i = 0; . . ){ void calc. Sum( int[] a, int i) { sum += a[i]; if (max < a[i]) max = a[i]; } class Min extends Max { void calc (int[]). calc. Sum(int[] a, int i) { sum += a[i]; if (max > a[i]) max = a[i]; } } 9

他の方法: クロージャ • ローカル変数にアクセスできる – 上書きするとアクセスできない class Max { Closure calc. Sum; int calc

他の方法: クロージャ • ローカル変数にアクセスできる – 上書きするとアクセスできない class Max { Closure calc. Sum; int calc (int[] a) { int max, . . for (int i = 0; . . ) { calc. Sum = { if (max < a[i]) max = a[i]; } calc. Sum(); } : } } class Min extends Max { int calc (int[] a) { calc. Sum = { if (max > a[i]) max = a[i]; } : } } 12