私は、 'Equips'が拡張する 'Items'というクラスを持っていて、 'Helmet'は 'Equips'から拡張しています。 .txtファイルから項目の統計情報を読み込む 'getStats'というメソッドがあります。私が 'Items'クラスに 'getStats'メソッドを置くと、 'this'を使って 'Helmet'オブジェクトにアクセスしようとしているどのフィールドであれ。 nullが表示されます。ヘルメットでアクセスしようとしているフィールドは、テキストファイルがロードされる前にヘルメットが作成されると初期化されます。私は非常に簡単に 'Equips'クラスに 'getStats'メソッドを置き、 'Items'クラスに空の 'getStats'メソッドを置くことができましたが、それがどのように動作するようにする方法があるのだろうかと思っていました。前もって感謝します!javaの拡張クラスで 'this'キーワードを使用
Items.java:
package com.projects.aoa;
import static com.projects.aoa.Print.*;
import java.util.*;
import java.io.*;
class Items {
String name, type;
int id;
int hp, mp, str, def;
boolean vacent;
static void getAllStats(Items[] e){
for(Items i : e){
getItemStats(i);
}
}
static void getItemStats(Items i){
i.getStats();
}
void getStats(){
try {
//System.out.println(System.getProperty("user.dir"));
print(this.name); //THIS shows up as null as well as those \/below\/
FileInputStream fstream = new FileInputStream(System.getProperty("user.dir")
+ "/src/com/projects/aoa/" + this.type + this.name + ".txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
int counter = 0;
while ((line = br.readLine()) != null) {
if (line.length() == 0){
break;
}
switch (counter) {
case 0:
this.hp = Integer.parseInt(line);
counter++;
break;
case 1:
this.mp = Integer.parseInt(line);
counter++;
break;
case 2:
this.def = Integer.parseInt(line);
counter++;
break;
case 3:
this.str = Integer.parseInt(line);
counter++;
break;
}
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Game.java:
Helmet headBand = new Helmet("HeadBand");
Helmet bronzeHelmet = new Helmet("BronzeHelmet");
Items[] equips = {
headBand, bronzeHelmet
};
getAllStats(equips);
Equips.java:
package com.projects.aoa;
import static com.projects.aoa.Print.print;
import static com.projects.aoa.Print.println;
import java.io.*;
class Equips extends Items{
String name, type;
int hp, mp, str, def;
void printStats(){
println("[" + name + "]");
println("Type: " + type);
println("HP: " + hp);
println("MP: " + mp);
println("Def: " + def);
println("Str: " + str);
}
}
class Helmet extends Equips {
Helmet(String name){
this.name = name;
this.type = "h_";
}
}
「ヘルメット」のコードの一部を表示することはできますか? 'Helmet'クラスにも' name'パラメータがあると思われます。そうでなければ 'name'を設定するのを忘れてしまいます。 – Bringer128