1. Warisan
Untuk bekerja dengan mesin game CodeGym, Anda harus menggunakan warisan . Tetapi bagaimana jika Anda tidak tahu apa itu? Di satu sisi, Anda memang perlu memahami dan mempelajari topik ini. Di sisi lain, mesinnya dirancang khusus agar sangat sederhana, sehingga Anda bisa bertahan dengan pengetahuan warisan yang dangkal.
Jadi apa itu warisan? Secara sederhana, pewarisan adalah hubungan antara dua kelas. Salah satunya bertindak sebagai kelas induk, dan yang lainnya menjadi kelas anak (keturunan). Terlebih lagi, kelas induk bahkan mungkin tidak tahu bahwa ia memiliki kelas keturunan. Dengan kata lain, orang tua tidak mendapatkan banyak manfaat dari memiliki kelas keturunan.
Tetapi pewarisan memberikan banyak keuntungan bagi kelas anak. Yang paling penting adalah bahwa semua variabel dan metode kelas induk muncul di kelas anak, seolah-olah kode kelas induk disalin langsung ke kelas anak. Ini tidak sepenuhnya akurat, tetapi cukup untuk pemahaman dasar tentang pewarisan.
Berikut adalah beberapa contoh untuk membantu Anda lebih memahami warisan.
Contoh 1 — inilah contoh paling sederhana
|
Kelas Child mewarisi Parent kelas dengan bantuan kata extends kunci. |
|
Contoh 2 — menggunakan variabel kelas induk
|
Kelas Child dapat menggunakan bidang age dan name dari kelas Parent seolah-olah dideklarasikan di Child kelas itu sendiri. |
|
Contoh 3 — menggunakan metode kelas induk
|
Kelas Child dapat menggunakan variabel dan metode dari kelas Induk seolah-olah dideklarasikan di kelas Child . Dalam contoh ini, kami menggunakan getName() metode. |
|
Menghilangkan beberapa detail, kita dapat mengatakan bahwa dari perspektif kompiler Java, kita cukup menyalin kode kelas induk ke dalam 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);
}
}
Child
tampilan kelas dari sudut pandang kompiler
2. Penggantian metode
Terkadang ada situasi di mana kita membuat Child
kelas kita mewarisi kelas yang sangat berguna Parent
, menyebabkan anak mewarisi semua variabel dan metode induknya. Tetapi beberapa dari metode itu mungkin tidak bekerja seperti yang kita inginkan atau tidak sama sekali seperti yang kita inginkan.
Apa yang Anda lakukan dalam kasus ini? Kita dapat mengganti metode yang implementasinya tidak kita sukai . Ini adalah hal yang sederhana untuk dilakukan: di Child
kelas kami, kami cukup mendeklarasikan metode dengan tanda tangan yang sama dengan metode di kelas Parent
dan kemudian menulis kode kami sendiri di dalamnya.
Contoh 1 — penggantian metode
|
Metode ini printInfo() akan menampilkan frasa berikut:
|
|
Menyederhanakan situasi, pewarisan menyebabkan kode kelas induk disalin ke kelas anak. Namun jika kelas turunan sudah menjadi metode yang ada di kelas leluhur, maka metode tersebut tidak disalin dari kelas leluhur. Di sini kita mengatakan bahwa metode di kelas anak menggantikan metode di kelas induk. Lihatlah contoh di bawah ini. Mungkin itu akan membantu membuat segalanya menjadi lebih jelas:
Beginilah tampilan kelas Anak dari sudut pandang kompiler: |
---|
|
Contoh 2 - sedikit sihir pewarisan (dan penggantian metode)
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";
}
}
Jika printInfo()
metode ini dipanggil pada sebuah Parent
tipe, maka metode tersebut akan memanggil getName()
metode dari Parent
kelas tersebut.
Jika printInfo()
metode ini dipanggil pada suatu Child
objek, metode tersebut pada gilirannya akan memanggil getName()
metode kelas tersebut Child
.
Dengan kata lain, printInfo()
metode ini hanya dideklarasikan di kelas, tetapi metode kelas Parent
akan dipanggil jika metode tersebut dipanggil pada objek.getName()
Child
printInfo()
Child
Contoh:
|
Kode ini menampilkan teks berikut di layar:
|
|
Kode ini menampilkan teks berikut di layar:
|
Dan semua karena dari sudut pandang kompiler (versi yang sangat disederhanakan), kode kelas Child
terlihat seperti ini:
public class Child extends Parent
{
public getName() {
return "Luke, I am your father";
}
public void printInfo()
{
System.out.println(getName());
}
}
Child
tampilan kelas dari sudut pandang kompiler
3. Daftar
Berikut pengingat singkat tentang daftar ( List
). Daftar memiliki banyak kesamaan dengan array:
- Mereka dapat menyimpan banyak data dari jenis tertentu.
- Mereka membiarkan Anda mendapatkan elemen berdasarkan indeks mereka.
- Indeks elemen dimulai dari
0
.
Keuntungan daftar:
Tidak seperti array, daftar dapat mengubah ukuran secara dinamis. Segera setelah pembuatan, ukuran daftar adalah 0
. Saat item ditambahkan ke daftar, ukurannya bertambah. Contoh membuat daftar:
ArrayList<String> myList = new ArrayList<String>();
ArrayList
Nilai yang ditunjukkan dalam kurung sudut adalah tipe data yang dapat disimpan oleh daftar.
Berikut adalah beberapa metode untuk bekerja dengan daftar:
Kode | Deskripsi singkat |
---|---|
|
Membuat daftar string baru |
|
Tambahkan elemen ke akhir daftar |
|
Tambahkan elemen ke awal daftar |
|
Dapatkan elemen dengan indeksnya |
|
Ubah elemen dengan indeksnya |
|
Dapatkan jumlah elemen dalam daftar |
|
Hapus elemen dari daftar |
Untuk informasi lebih lanjut tentang daftar, Anda dapat membaca artikel berikut:
4. Angka acak
Mesin game CodeGym memiliki dua metode yang dapat digunakan untuk menghasilkan angka acak. Metode-metode ini adalah:
int getRandomNumber(int max)
int getRandomNumber(int min, int max)
Metode pertama — getRandomNumber(int max)
— mengembalikan nomor acak dalam rentang 0
, 1
, 2
, ... max-1
. Di balik layar, ia menggunakan Random
kelas dari java.util
paket, tetapi itu tidak mengubah cara Anda menggunakan nomor acak.
getRandomNumber(int)
menerima bilangan bulat sebagai argumen. Angka ini akan menjadi batas atas angka yang dapat dikembalikan oleh generator angka acak. Batas bawah adalah 0. Perhatian! Generator angka acak TIDAK AKAN PERNAH mengembalikan nilai batas atas. Misalnya, jika Anda memanggil getRandomNumber(3)
, itu akan secara acak mengembalikan 0, 1, atau 2. Seperti yang Anda lihat, itu tidak akan mengembalikan 3. Menggunakan generator angka acak dengan cara ini agak sederhana, tetapi cocok untuk banyak kasus.
Metode kedua — getRandomNumber(int min, int max)
— mengembalikan bilangan bulat acak dalam rentang [min, max-1]
. Itu tidak akan pernah mengembalikan angka yang kurang dari min
, dan tidak akan pernah mengembalikan angka yang lebih besar dari max-1
.
Bagaimana metode ini dapat digunakan dalam praktik?
1. Dadu
Misalkan Anda ingin mensimulasikan lemparan dadu dan mendapatkan angka acak dalam rentang tersebut 1-6
. Bagaimana Anda akan melakukannya? Ini dapat dilakukan dengan kode seperti ini:
int dice = getRandomNumber(1, 7);
Metode ini akan mengembalikan bilangan bulat acak dalam range 1-6
.
2. Latihan sasaran
Misalkan Anda ingin mensimulasikan pemotretan pada target, dan keakuratan bidikan menyertakan komponen acak yang bervariasi dalam rentang dari -10
hingga +10
inklusif. Ini dapat dilakukan dengan kode seperti ini:
int dx = getRandomNumber(-10, 11);
Metode ini akan mengembalikan bilangan bulat acak dalam kisaran -10
ke +10
.
Ada banyak cara untuk menggunakan angka acak dalam permainan. Anda hanya dibatasi oleh imajinasi Anda. Tulis game Anda sendiri, sempurnakan, dan nikmati prosesnya.
Semua orang bisa bermain game, tapi hanya pemrogram yang bisa membuatnya.
GO TO FULL VERSION