1. Pusaka

Kanggo nggarap mesin game CodeGym, sampeyan kudu nggunakake warisan . Nanging apa yen sampeyan ora ngerti apa iku? Ing tangan siji, sampeyan kudu ngerti lan sinau topik iki. Ing tangan liyane, mesin dirancang khusus kanggo dadi banget prasaja, supaya sampeyan bisa njaluk dening kawruh entheng saka warisan.

Dadi apa warisan? Ing istilah sing prasaja, warisan minangka hubungan antarane rong kelas. Salah sijine dadi kelas wong tuwa, lan liyane dadi kelas anak (turunan). Apa maneh, kelas wong tuwa bisa uga ora ngerti yen dheweke duwe kelas turunan. Ing tembung liya, wong tuwa ora entuk akeh keuntungan saka duwe kelas turunan.

Nanging warisan menehi akeh kaluwihan kanggo kelas anak. Sing paling penting yaiku kabeh variabel lan metode kelas induk katon ing kelas anak, kaya kode kelas induk disalin langsung menyang kelas anak. Iki ora sakabehe akurat, nanging bakal cukup kanggo pangerten dhasar saka warisan.

Ing ngisor iki sawetara conto kanggo mbantu sampeyan luwih ngerti babagan warisan.

Conto 1 — iki conto sing paling gampang

public class Parent
{
}
Kelas kasebut Childmenehi warisan Parentkelas kanthi bantuan tembung extendskunci.
public class Child extends Parent
{
}

Conto 2 - nggunakake variabel kelas induk

public class Parent
{
  public int age;
  public String name;
}
Kelas kasebut Childbisa nggunakake agelan namelapangan kelas Parentkaya-kaya diumumake ing Childkelas kasebut.
public class Child extends Parent
{
  public void printInfo()
  {
    System.out.println(name + " " + age);
  }
}

Conto 3 - nggunakake metode kelas induk

public class Parent
{
   public int age;
   public String name;
   public getName() {
      return name;
   }
}
Kelas kasebut Childbisa nggunakake variabel lan metode kelas Induk kaya-kaya diumumake ing Childkelas kasebut. Ing conto iki, kita nggunakake getName()cara.
public class Child extends Parent
{
   public void printInfo()
   {
      System.out.println(getName() + " " + age);
   }
}

Ngilangi sawetara rincian, kita bisa ngomong yen saka perspektif kompiler Jawa, kita mung nyalin kode kelas induk menyang kode kelas anak:

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);
   }
}
Mangkene carane Childkelas katon saka sudut pandang compiler


2. Metode overriding

Kadhangkala ana kahanan sing nggawe kelas kita Childentuk warisan kelas sing migunani banget Parent, nyebabake bocah kasebut entuk kabeh variabel lan metode wong tuwa. Nanging sawetara cara kasebut bisa uga ora bisa digunakake kanthi cara sing dikarepake utawa ora kaya sing dikarepake.

Apa sing sampeyan tindakake ing kasus iki? Kita bisa ngganti cara sing implementasine ora disenengi . Iki minangka prasaja: ing Childkelas kita mung ngumumake metode kanthi teken sing padha karo metode ing Parentkelas banjur nulis kode dhewe ing kono.

Conto 1 - cara overriding

public class Parent
{
   public String name;
   public void setName(String nameNew) {
      name = nameNew;
   }

   public getName() {
      return name;
   }
}
Cara kasebut printInfo()bakal nampilake frasa ing ngisor iki:
Luke, No!!!
public class Child extends Parent
{
   public void setName(String nameNew) {
      name = nameNew + ", No!!!";
   }

   public void printInfo()
   {
      setName("Luke");
      System.out.println(getName());
   }
}

Oversimplifying kahanan Luwih, warisan nyebabake kode saka kelas induk disalin menyang kelas anak. Nanging yen kelas turunan wis dadi metode sing ana ing kelas leluhur, mula metode kasebut ora ditiru saka kelas leluhur. Ing kene kita ngomong yen metode ing kelas anak ngindhari metode ing kelas induk. Deleng conto ing ngisor iki. Muga-muga bisa mbantu nggawe luwih jelas:

Mangkene carane kelas Anak katon saka sudut pandang kompiler:
public class Child extends Parent
{
   public String name;    // An inherited variable

   public void setName(String nameNew)  // The overridden method replaces the inherited one
   {
      name = nameNew + ", No!!!";
   }

   public getName()    // An inherited method
   {
      return name;
   }

   public void printInfo()
   {
      setName("Luke");
      System.out.println(getName());
   }
}

Conto 2 - sihir warisan cilik (lan metode overriding)

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";
   }
}

Yen printInfo()metode kasebut diarani Parentjinis, banjur diarani getName()metode kelas Parent.

Yen printInfo()metode kasebut diarani Childobyek, banjur diarani getName()metode kelas Child.

Ing tembung liya, printInfo()metode kasebut diumumake mung ing Parentkelas, nanging diarani getName()metode kelas Childyen printInfo()metode kasebut diarani obyek Child.

Tuladha:

Parent parent = new Parent();
parent.printnInfo();
Kode iki nampilake teks ing ngisor iki ing layar:
Luke
Child child = new Child();
child.printnInfo();
Kode iki nampilake teks ing ngisor iki ing layar:
Luke, I am your father

Lan kabeh amarga saka sudut pandang compiler (versi sing gampang banget), kode kelas Childkaton kaya iki:

public class Child extends Parent
{
   public getName() {
      return "Luke, I am your father";
   }

   public void printInfo()
   {
      System.out.println(getName());
   }
}
Mangkene carane Childkelas katon saka sudut pandang compiler


3. Dhaptar

Punika pangeling singkat babagan dhaptar ( List). Dhaptar duwe akeh sing padha karo array:

  • Dheweke bisa nyimpen akeh data saka jinis tartamtu.
  • Dheweke ngidini sampeyan entuk unsur kanthi indeks.
  • Indeks saka unsur miwiti ing 0.

Kaluwihan saka dhaptar:

Ora kaya array, dhaptar bisa ngganti ukuran kanthi dinamis. Sanalika sawise nggawe, ukuran dhaptar yaiku 0. Nalika item ditambahake menyang dhaptar, ukurane mundhak. Conto nggawe dhaptar:

ArrayList<String> myList = new ArrayList<String>();
Nggawe anyarArrayList

Nilai sing dituduhake ing kurung sudut yaiku jinis data sing bisa disimpen ing dhaptar.

Ing ngisor iki sawetara cara kanggo nggarap dhaptar:

Kode Katrangan ringkes
ArrayList<String> list = new ArrayList<String>();
Nggawe dhaptar strings anyar
list.add("name");
Tambah unsur ing mburi dhaftar
list.add(0, "name");
Tambah unsur ing wiwitan dhaptar
String name = list.get(5);
Entuk unsur kanthi indeks
list.set(5, "new name");
Ngganti unsur kanthi indeks
int count = list.size();
Entuk nomer unsur ing dhaptar
list.remove(4);
Mbusak unsur saka dhaptar

Kanggo informasi luwih lengkap babagan dhaptar, sampeyan bisa maca artikel ing ngisor iki:



4. Nomer acak

Mesin game CodeGym duwe rong cara sing bisa digunakake kanggo ngasilake nomer acak. Cara kasebut yaiku:

int getRandomNumber(int max)
int getRandomNumber(int min, int max)

Cara pisanan — getRandomNumber(int max)— ngasilake nomer acak ing sawetara 0, 1, 2, ... max-1. Ing hood, nggunakake Randomkelas saka java.utilpaket, nanging ora ngganti carane sampeyan nggunakake nomer acak.

getRandomNumber(int)nampa integer minangka argumen. Nomer iki bakal dadi wates ndhuwur ing nomer sing generator nomer acak bisa bali. Watesan ngisor yaiku 0. Manungsa waé! Generator nomer acak ora bakal ngasilake nilai wates ndhuwur. Contone, yen sampeyan nelpon getRandomNumber(3), bakal acak bali salah siji 0, 1, utawa 2. Nalika sampeyan bisa ndeleng, iku ora bakal bali 3. Nggunakake generator nomer acak ing cara iki cukup prasaja, nanging cocok kanggo akeh kasus.

Cara kapindho — getRandomNumber(int min, int max)— ngasilake integer acak ing sawetara [min, max-1]. Iku ora bakal bali nomer kurang saka min, lan ora bakal bali nomer luwih saka max-1.

Kepiye cara kasebut bisa digunakake ing praktik?

1. Dadu

Upaminipun sampeyan pengin simulasi muter saka die lan njaluk nomer acak ing sawetara 1-6. Kepiye carane sampeyan nindakake? Iki bisa ditindakake kanthi kode kaya iki:

int dice = getRandomNumber(1, 7);

Cara iki bakal ngasilake integer acak ing kisaran 1-6.

2. Sasaran laku

Upaminipun sampeyan pengin simulasi njupuk ing Doel, lan akurasi dijupuk kalebu komponen acak sing beda-beda ing sawetara saka -10kanggo +10klebu. Iki bisa ditindakake kanthi kode kaya iki:

int dx = getRandomNumber(-10, 11);

Cara iki bakal ngasilake integer acak ing kisaran -10menyang +10.

Ana akeh cara kanggo nggunakake nomer acak ing game. Sampeyan mung diwatesi dening imajinasi sampeyan. Tulis game sampeyan dhewe, nyaring, lan nikmati proses kasebut.

Saben uwong bisa main game, nanging mung programer sing bisa nggawe.