1. Moștenirea
Pentru a lucra cu motorul de joc CodeGym, va trebui să utilizați moștenirea . Dar dacă nu știi ce este asta? Pe de o parte, trebuie să înțelegeți și să studiați acest subiect. Pe de altă parte, motorul este conceput special pentru a fi foarte simplu, astfel încât să te poți descurca cu o cunoaștere superficială a moștenirii.
Deci, ce este moștenirea? În termeni simpli, moștenirea este o relație între două clase. Unul dintre ei acționează ca clasa părinte, iar celălalt devine clasa copil (descendent). În plus, o clasă părinte poate nici măcar să nu știe că are clase descendențe. Cu alte cuvinte, părintele nu primește prea multe beneficii de a avea clase de descendenți.
Dar moștenirea oferă multe avantaje clasei de copii. Cel mai important dintre ele este faptul că toate variabilele și metodele clasei părinte apar în clasa copil, ca și cum codul clasei părinte ar fi copiat direct în clasa copil. Acest lucru nu este în întregime exact, dar va fi suficient pentru o înțelegere de bază a moștenirii.
Iată câteva exemple pentru a vă ajuta să înțelegeți mai bine moștenirea.
Exemplul 1 - iată cel mai simplu exemplu
|
Clasa Child moștenește Parent clasa cu ajutorul cuvântului extends cheie. |
|
Exemplul 2 — folosind variabilele clasei părinte
|
Clasa Child poate folosi câmpurile age și name ale clasei Parent ca și cum ar fi fost declarate în Child clasa însăși. |
|
Exemplul 3 - folosind metodele clasei părinte
|
Clasa Child poate folosi variabilele și metodele clasei Parent ca și cum ar fi fost declarate în Child clasă. În acest exemplu, folosim getName() metoda. |
|
Omitând câteva detalii, putem spune că din perspectiva compilatorului Java, am copiat pur și simplu codul clasei părinte în codul clasei copil:
public class Child extends Parent
{
public int age; // An inherited variable
public String name; // An inherited variable
public getName() { // An inherited method
return name;
}
public void printInfo()
{
System.out.println(getName() + " " + age);
}
}
Child
apare clasa din punctul de vedere al compilatorului
2. Anularea metodei
Uneori există situații în care facem ca Child
clasa noastră să moștenească o clasă foarte utilă Parent
, determinând copilul să moștenească toate variabilele și metodele părintelui. Dar este posibil ca unele dintre aceste metode să nu funcționeze așa cum ne dorim sau să nu funcționeze deloc așa cum ne dorim.
Ce faci in acest caz? Putem suprascrie o metodă a cărei implementare nu ne place . Acesta este un lucru simplu de făcut: în Child
clasa noastră pur și simplu declarăm o metodă cu aceeași semnătură ca metoda din Parent
clasă și apoi scriem propriul cod în ea.
Exemplul 1 — înlocuirea metodei
|
Metoda printInfo() va afișa următoarea frază:
|
|
Simplificand oarecum situația, moștenirea face ca codul clasei părinte să fie copiat în clasa copil. Dar dacă o clasă descendentă este deja o metodă care există într-o clasă strămoșească, atunci acea metodă nu este copiată din clasa strămoșului. Aici spunem că metoda din clasa copil suprascrie metoda din clasa părinte. Uită-te la exemplul de mai jos. Poate vă va ajuta să faceți lucrurile puțin mai clare:
Iată cum apare clasa Child din punctul de vedere al compilatorului: |
---|
|
Exemplul 2 - puțină magie de moștenire (și depășirea metodei)
public class Parent
{
public getName() {
return "Luke";
}
public void printInfo()
{
System.out.println( getName() );
}
}
public class Child extends Parent
{
public getName() {
return "Luke, I am your father";
}
}
Dacă printInfo()
metoda este apelată pe un Parent
tip, aceasta la rândul său apelează getName()
metoda clasei Parent
.
Dacă printInfo()
metoda este apelată pe un Child
obiect, acesta la rândul său apelează getName()
metoda clasei Child
.
Cu alte cuvinte, printInfo()
metoda este declarată numai în Parent
clasă, dar apelează getName()
metoda clasei Child
dacă printInfo()
metoda este apelată pe un Child
obiect.
Exemplu:
|
Acest cod afișează următorul text pe ecran:
|
|
Acest cod afișează următorul text pe ecran:
|
Și totul pentru că din punctul de vedere al compilatorului (o versiune foarte simplificată a acestuia), codul clasei Child
arată astfel:
public class Child extends Parent
{
public getName() {
return "Luke, I am your father";
}
public void printInfo()
{
System.out.println(getName());
}
}
Child
apare clasa din punctul de vedere al compilatorului
3. Liste
Iată un scurt memento despre liste ( List
). Listele au multe în comun cu tablourile:
- Ele pot stoca o mulțime de date de un anumit tip.
- Vă permit să obțineți elemente după indexul lor.
- Indicii elementelor încep la
0
.
Avantajele listelor:
Spre deosebire de matrice, listele pot schimba dinamic dimensiunea. Imediat după creare, dimensiunea unei liste este 0
. Pe măsură ce elementele sunt adăugate în listă, dimensiunea acesteia crește. Exemplu de creare a unei liste:
ArrayList<String> myList = new ArrayList<String>();
ArrayList
Valoarea indicată în parantezele unghiulare este tipul de date pe care lista îl poate stoca.
Iată câteva metode de lucru cu o listă:
Cod | Descriere scurta |
---|---|
|
Crearea unei noi liste de șiruri |
|
Adăugați un element la sfârșitul listei |
|
Adăugați un element la începutul listei |
|
Obțineți un element după indexul său |
|
Schimbați un element după indicele său |
|
Obțineți numărul de elemente din listă |
|
Eliminați un element din listă |
Pentru mai multe informații despre liste, puteți citi următoarele articole:
4. Numere aleatorii
Motorul de joc CodeGym are două metode care pot fi folosite pentru a genera numere aleatorii. Aceste metode sunt:
int getRandomNumber(int max)
int getRandomNumber(int min, int max)
Prima metodă — getRandomNumber(int max)
— returnează un număr aleatoriu în intervalul 0
, 1
, 2
, ... max-1
. Sub capotă, folosește Random
clasa din java.util
pachet, dar asta nu schimbă modul în care folosești un număr aleatoriu.
getRandomNumber(int)
acceptă un număr întreg ca argument. Acest număr va fi limita superioară a numerelor pe care le poate returna generatorul de numere aleatorii. Limita inferioară este 0. Atenție! Generatorul de numere aleatoare nu va returna NICIODATĂ valoarea limitei superioare. De exemplu, dacă apelați getRandomNumber(3)
, va returna aleatoriu fie 0, 1, fie 2. După cum puteți vedea, nu va returna 3. Utilizarea unui generator de numere aleatorii în acest fel este destul de simplă, dar este potrivită pentru multe cazuri.
A doua metodă — getRandomNumber(int min, int max)
— returnează un număr întreg aleatoriu în intervalul [min, max-1]
. Nu va returna niciodată un număr mai mic decât min
, și nu va returna niciodată un număr mai mare de max-1
.
Cum pot fi utilizate aceste metode în practică?
1. zaruri
Să presupunem că doriți să simulați aruncarea unui zar și să obțineți un număr aleatoriu în interval 1-6
. Cum ai face-o? Acest lucru se poate face cu un cod ca acesta:
int dice = getRandomNumber(1, 7);
Această metodă va returna un număr întreg aleatoriu în intervalul 1-6
.
2. Practica țintă
Să presupunem că doriți să simulați tragerea la o țintă, iar acuratețea unei fotografii include o componentă aleatorie care variază în intervalul de la -10
la +10
inclusiv. Acest lucru se poate face cu un cod ca acesta:
int dx = getRandomNumber(-10, 11);
Această metodă va returna un număr întreg aleatoriu în -10
intervalul +10
.
Există multe moduri de a folosi numere aleatorii în jocuri. Ești limitat doar de imaginația ta. Scrieți propriile jocuri, rafinați-le și bucurați-vă de proces.
Oricine poate juca jocuri, dar numai programatorii le pot crea.
GO TO FULL VERSION