メソッドをクラスあるいはインスタンスに持たせる
前々回のExamRecordクラスにいくつかメソッドを加えたクラスを考える。
package j2.lesson02_2; public class ExamRecord2 { String name; int math; int japanese; int english; public ExamRecord2(String name, int math, int japanese, int english) { this.name = name; this.math = math; this.japanese = japanese; this.english = english; } public void showExamRecord() { System.out.println(this.name + ", 数学 = " + this.math + ", 国語 = " + this.japanese + ", 英語 = " + this.english + ", 3科目の平均 = " + ((this.math + this.japanese + this.english) / 3.0)); } public static double averageMath(ExamRecord2[] ra){ int sum = 0; for(int i=0; i<ra.length; i++){ sum += ra[i].math; } return (double)sum / ra.length; } public static double averageJapanese(ExamRecord2[] ra){ // 省略 } public static double averageEnglish(ExamRecord2[] ra){ // 省略 }
Quiz
- j2.lesson01_2.ExamRecordAction4 がもっていたメソッドをどのようにExamRecord2に移したのか比較してみよ。
- コンストラクタ、クラスメソッド、インスタンスメソッドの定義の仕方の違いを説明せよ。
クラスメソッドとインスタンスメソッドの呼び出し方
package j2.lesson02_2; public class ExamRecord2Action { public static void main(String[] args) { ExamRecord2[] rec = new ExamRecord2[4]; rec[0] = new ExamRecord2("Taro", 50, 90, 100); rec[1] = new ExamRecord2("Hanako", 70, 30, 80); rec[2] = new ExamRecord2("Kenji", 60, 50, 70); rec[3] = new ExamRecord2("Aya", 40, 100, 90); for (int i = 0; i < rec.length; i++) { rec[i].showExamRecord(); } System.out.println("全員の数学の平均点 = " + ExamRecord2.averageMath(rec)); System.out.println("全員の国語の平均点 = " + ExamRecord2.averageJapanese(rec)); System.out.println("全員の英語の平均点 = " + ExamRecord2.averageEnglish(rec)); } }
ExamRecord2[] rec = new ExamRecord2[4];
を実行した直後の様子は下図の通り。この状態で
rec[0].name = "Taro"; rec[0].math = 50;
のようなことはできない。なぜか。
rec[0] = new ExamRecord2("Taro", 50, 90, 100);
を実行した直後の様子は下図の通り。
実行結果は以下の通り。
Taro, 数学 = 50, 国語 = 90, 英語 = 100, 3科目の平均 = 80.0 Hanako, 数学 = 70, 国語 = 30, 英語 = 80, 3科目の平均 = 60.0 Kenji, 数学 = 60, 国語 = 50, 英語 = 70, 3科目の平均 = 60.0 Aya, 数学 = 40, 国語 = 100, 英語 = 90, 3科目の平均 = 76.66666666666667 全員の数学の平均点 = 55.0 全員の国語の平均点 = 67.5 全員の英語の平均点 = 85.0
Quiz
- クラスメソッドとインスタンスメソッドの呼び出し方はどう違うか説明せよ。