Az öröklődés az OOP (objektumorientált programozás) egyik központi fogalma. Egy „IS-A” kapcsolatot ír le. A programozásban szó szerint ugyanazt jelenti, mint az angolban: tulajdonságokat örökölsz a szülőtől (a programozásban ezek a tulajdonságok általában függvények és változók).
Tekintsd például az Animal osztályt, ahogy az alábbiakban látható:
//Creating an Animal class with bark() as a member function.
public class Animal {
public void bark() {
System.out.println("This is an animal");
}
}
Az Animal egy szülőosztály, mert a benne lévő tulajdonságok általánosságban minden állatra kiterjeszthetők.
Tekintsünk egy Lion nevű állatot, amelynek az osztálya így néz ki:
//Lion class is a child class of Animal.
public class Lion extends Animal {
@Override
public void bark() {
System.out.println("Lion here!!");
}
}
Az Override annotációval jelezheted, hogy az alosztály egy metódusa felülírja a főosztály metódusát.
Nem szigorúan kötelező, de ajánlott használni.
Most pedig, amikor ezt írjuk:
Animal animal = new Lion(); //creating instance of Animal, of type Lion
animal.bark();
Megjegyzés: az Animal osztályt Lion értékkel inicializáljuk.
A kimenet a következő lesz:
Lion here!!
Az OOP szerint az öröklődésnek több típusa van, de a Java csak néhányat támogat belőlük (a többszintűt és a hierarchikust). Ha többet szeretnél olvasni róla, olvasd el ezt.
Ebben a feladatban egy szerepjátékban játszol, ahol különböző típusú harcosok harcolhatnak egymás ellen. A játéknak minden harcostípusra más szabályai vannak. Két konkrét típusra összpontosítunk: a Wizard és a Warrior típusra.
A Warrior típusra ezek a szabályok érvényesek:
6 pont sebzést okoz, ha a harcos, akit megtámad, nem sebezhető.10 pont sebzést okoz, ha a harcos, akit megtámad, sebezhető.A Wizard típusra ezek a szabályok érvényesek:
12 pont sebzést okoz, ha előre elkészített egy varázslatot.3 pont sebzést okoz, ha nem készített elő varázslatot.Hozz létre egy új Warrior nevű osztályt.
Ez az osztály a meglévő Fighter osztályból örököljön.
Frissítsd a Warrior osztályt úgy, hogy a toString() metódusa leírja, milyen típusú harcosról van szó.
A metódusnak a "Fighter is a Warrior" stringet kell visszaadnia.
Warrior warrior = new Warrior();
warrior.toString();
// => "Fighter is a Warrior"
Frissítsd a Warrior osztályt úgy, hogy az isVulnerable() metódusa mindig false értéket adjon vissza.
Warrior warrior = new Warrior();
warrior.isVulnerable();
// => false
Frissítsd a Warrior osztályt úgy, hogy a getDamagePoints(Fighter) metódusa a fenti szabályok szerint kiszámítsa a Warrior által okozott sebzést.
Warrior warrior = new Warrior();
Wizard wizard = new Wizard();
warrior.getDamagePoints(wizard);
// => 10
Hozz létre egy másik új Wizard nevű osztályt.
Ez az osztály szintén a meglévő Fighter osztályból örököljön.
Frissítsd a Wizard osztályt úgy, hogy a toString() metódusa leírja, milyen típusú harcosról van szó.
A metódusnak a "Fighter is a Wizard" stringet kell visszaadnia.
Wizard wizard = new Wizard();
wizard.toString();
// => "Fighter is a Wizard"
Frissítsd a Wizard osztályt úgy, hogy hozzáadj egy prepareSpell() nevű metódust.
Az osztálynak emlékeznie kell rá, mikor hívják meg ezt a metódust, és biztosítania kell, hogy az isVulnerable() metódusa csak akkor adjon vissza false értéket, ha egy varázslat elő van készítve.
Wizard wizard = new Wizard();
wizard.prepareSpell();
wizard.isVulnerable();
// => false
Frissítsd a Wizard osztályt úgy, hogy a getDamagePoints(Fighter) metódusa a fenti szabályok szerint kiszámítsa a Wizard által okozott sebzést.
Wizard wizard = new Wizard();
Warrior warrior = new Warrior();
wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Java nyelvet 26 fogalom158 feladat segítségével, valódi emberi mentorálással, mindez ingyen.