だから私はこの関連コードを持っています...
public class PokemonTrainer {
private Pokemon p = new Squirtle();
private String name;
public PokemonTrainer(String name) {
this.name = name;
}
public static void main(String[] args) {
PokemonTrainer pt = new PokemonTrainer("Ash");
try {pt.fightGary();}
catch (Charmander c) {
System.out.println("You were roasted by a Charmander.");
}
catch (Squirtle s) {
System.out.println("You were drowned by a Squirtle.");
}
catch (Bulbasaur b) {
System.out.println("You were strangled by a Bulbasaur.");
}
catch (Pokemon p) {
System.out.println("You survived!");
}
}
public void fightGary() throws Pokemon {
throw p;
}
public class Pokemon extends Exception {}
public class Bulbasaur extends Pokemon {}
public class Squirtle extends Pokemon {}
public class Charmander extends Pokemon {}
「ゼニガメに溺れた」と表示されるのはなぜですか?
私の推論では、「キャッチ」はメソッドであり、オブジェクトがメソッドに渡されると、メソッドはオブジェクトの STATIC TYPE (この場合は「ポケモン」) に基づいて評価されます。これは以下に示されています。短い例:
public class PokemonTrainer {
private Pokemon p = new Squirtle();
private String name;
public PokemonTrainer(String name) {
this.name = name;
}
public static void main(String[] args) {
PokemonTrainer pt = new PokemonTrainer("Ash");
pt.fightGary(pt.p); // ------------ Prints "Pokemon!!!"
}
public void fightGary(Pokemon p) {
System.out.println("Pokemon!!!");
}
public void fightGary(Squirtle s) {
System.out.println("Squirtle!!!");
}
}
では、これら 2 つの例の違いは何でしょうか。最初の例が何をするかを出力するのはなぜですか?
ありがとう!