Java継承に関する小さな質問です...
1435 ワード
今日Javaプログラミングの思想を見ていると、実行の結果は自分が考えているのとは全然違います.まずコードを貼ってください.
mainメソッドでは、tメソッドを呼び出すと、HeroのオブジェクトhがCanfightに変換され、Canfightのfightメソッドが呼び出されますが、fightメソッドは具体的に実装されていないため、出力やコンパイラエラーは発生しないと思います.
実際の結果、HeroはActionCharacterを継承し、実行時にHeroのActionCharacterで使用できるものをすべてActionCharacterにコピーすることで、ActionCharacterクラスでfightメソッドの具体的な実装が可能になります.別の観点から,ActionCharacterクラスにはインタフェースCanfightにおけるfightメソッドの実装がある.
私自身が分析したのはこのようなので、大神が指摘してくれることを望んでいます.の
//CanFight
interface Canfight {
void fight();
}
//ActionCharacter
class ActionCharacter {
public void fight() {
System.out.println("Fight from ActionCharacter");
}
}
//Hero ActionCharacter Canfight
class Hero extends ActionCharacter implements Canfight {
public void swin() {}
public void fly() {}
}
public class Adventure {
// Canfight, , fight
public static void t(Canfight x) {
x.fight();
}
// ActionCharacter , , fight
public static void w(ActionCharacter x) {
x.fight();
}
public static void main(String[] srgs) {
Hero h = new Hero();
t(h);
w(h);
}
}
/*
Fight from ActionCharacter
Fight from ActionCharacter
*/
mainメソッドでは、tメソッドを呼び出すと、HeroのオブジェクトhがCanfightに変換され、Canfightのfightメソッドが呼び出されますが、fightメソッドは具体的に実装されていないため、出力やコンパイラエラーは発生しないと思います.
実際の結果、HeroはActionCharacterを継承し、実行時にHeroのActionCharacterで使用できるものをすべてActionCharacterにコピーすることで、ActionCharacterクラスでfightメソッドの具体的な実装が可能になります.別の観点から,ActionCharacterクラスにはインタフェースCanfightにおけるfightメソッドの実装がある.
私自身が分析したのはこのようなので、大神が指摘してくれることを望んでいます.の