「has-a」のhasは「持っている」という意味の英語の動詞 have の3人称単数形です。
("I have a pen","He has a pen"なんていう例題があったでしょ?)
クラスAにクラスBの変数が含まれている場合、クラスAはクラスB(の変数)を持っている(has-a)事になります。
質問のコードだと、Heroクラスは、Swordクラスの変数swordを持っていますから、"クラスHeroはクラスSwordを持っている"となる訳です。("クラスHeroはクラスSwordを包含している(含んでいる)"というような表現が使われることもありますが、意味するところは同じです)
HeroクラスはSwordクラスの変数swordを持っていますから、Heroクラスのインスタンス(オブジェクト)からswordの値を取り出したり、値を変更したりする事ができます。その際、どの変数なのかは変数名で指定します。
このぐらいまで理解していると、Mainクラスのコードの意味が判ると思います。
以下、Mainクラスの各行の下にコメントでコード意味を書いてみますので、ゆっくりと読んでください。
そんなに苦労せずに意味が判るのではないかと思います。
public class Main {
public static void main(String[] args) {
Sword s = new Sword();
// mainメソッドは、Swordクラスの変数sを持っています。
// そこに、Swordクラスのインスタンスを設定(代入)します。
// これ以降、sという変数はSwordクラスのインスタンスなのだと思ってコードを読んでください。
s.name = "炎の剣";
// Swordクラスは、Stringクラスの変数nameを持っています。(class Swordのコードを見てください)
// そこに、"炎の剣"という値(文字列)を代入します。
s.damage = 10;
// Swordクラスは、整数型の変数damageを持っています。
// そこに、10という値を代入します。
Hero h = new Hero();
// mainメソッドは、Heroクラスの変数hを持っています。
// そこに、Heroクラスのインスタンスを設定(代入)します。
h.name = "ミナト";
h.hp = 100;
// Heroクラスのインスタンス h が持つStringクラスの変数nameと、整数型の変数hpに、"ミナト"と10を代入します。
h.sword = s;
// Heroクラスのインスタンス h が持つSwordクラスの変数 swordに、このクラス(Main)で生成・設定したSwordクラスの変数sを代入します。
// h.swordとsが同じ値になったことを覚えておいてください。
System.out.println("現在の武器は" + h.sword.name);
// h.swordとsは同じ値なのですから、h.sword.nameとs.nameも同じになります。
// ここで、mainメソッドのコードを見直してみると「s.name = "炎の剣";」と設定されています。
// "現在の武器は"に続けて(+)、h.sword.nameの値("炎の剣")を画面に表示(System.out.println)すれば、『出力結果 現在の武器は炎の剣』となる訳です。
}
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。