learnxinyminutes-docs/id-id/java-id.html.markdown
2024-04-06 08:33:50 -07:00

801 lines
29 KiB
Java

---
language: java
contributors:
- ["Jake Prather", "http://github.com/JakeHP"]
- ["Jakukyo Friel", "http://weakish.github.io"]
- ["Madison Dickson", "http://github.com/mix3d"]
- ["Simon Morgan", "http://sjm.io/"]
- ["Zachary Ferguson", "http://github.com/zfergus2"]
- ["Cameron Schermerhorn", "http://github.com/cschermerhorn"]
- ["Rachel Stiyer", "https://github.com/rstiyer"]
filename: LearnJava-id.java
translators:
- ["Ahmad Zafrullah", "https://github.com/23Pstars"]
lang: id-id
---
Java adalah bahasa pemrograman yang memiliki tujuan umum dan berorientasi kelas dan objek.
[Baca lebih lanjut.](http://docs.oracle.com/javase/tutorial/java/)
```java
// Komentar satu baris diawali dengan // (dua garis miring)
/*
Ini adalah contoh komentar banyak-baris.
*/
/**
Ini adalah contoh komentar JavaDoc. Digunakan untuk mendeskripsikan sebuah kelas,
atau beberapa sifat dari kelas tersebut.
*/
// Menyertakan kelas ArrayList dalam paket java.util
import java.util.ArrayList;
// Menyertakan semua kelas yang ada dalam paket java.security
import java.security.*;
// Setiap dokumen .java sebuah kelas publik dengan nama yang sama dengan nama kelas.
public class BelajarJava {
// Untuk menjalankan program java, program harus memiliki sebuah method utama (main) sebagai awalan.
public static void main (String[] args) {
// System.out.println() digunakan untuk menampilkan satu baris teks.
System.out.println("Halo Dunia!");
System.out.println(
"Integer: " + 10 +
" Double: " + 3.14 +
" Boolean: " + true);
// System.out.print() hanya menampilkan teks tanpa baris baru.
System.out.print("Halo ");
System.out.print("Dunia");
// System.out.printf() memudahkan dalam mengatur format penampilan.
System.out.printf("pi = %.5f", Math.PI); // => pi = 3.14159
///////////////////////////////////////
// Variabel
///////////////////////////////////////
/*
* Deklarasi Variabel
*/
// Deklarasi variabel menggunakan format <tipe> <nama>
int nilai;
// Deklarasi banyak variabel menggunakan format yang sama <tipe> <nama1>, <tipe> <nama2>, <tipe> <nama3>
int nilai1, nilai2, nilai3;
/*
* Inisialisasi Variabel
*/
// Inisialisasi sebuah variabel menggunakan <tipe> <nama> = <nilai>
int nilai = 1;
// Inisialisasi banyak variabel menggunakan format yang sama <tipe> <nama1>, <nama2>, <nama3> = <nilai>
int nilai1, nilai2, nilai3;
nilai1 = nilai2 = nilai3 = 1;
/*
* Tipe Variabel
*/
// Byte - 8 bit signed untuk bilangan bulat komplemen 2
// (-128 <= byte <= 127)
byte nilaiByte = 100;
// Short - 8 bit signed untuk bilangan bulat komplemen 2
// (-32,768 <= short <= 32,767)
short nilaiShort = 10000;
// Integer - 32 bit signed untuk bilangan bulat komplemen 2
// (-2,147,483,648 <= int <= 2,147,483,647)
int nilaiInt = 1;
// Long - 64 bit signed untuk bilangan bulat komplemen 2
// (-9,223,372,036,854,775,808 <= long <= 9,223,372,036,854,775,807)
long nilaiLong = 100000L;
// Karakter "L" pada akhir nilai menyatakan tipe Long;
// selainnya akan dianggap sebagai nilai bilangan bulat.
// Catatan: Java tidak memiliki tipe unsigned.
// Float - Presisi-satu 32-bit standar IEEE 754 untuk Floating Point
// 2^-149 <= float <= (2-2^-23) * 2^127
float nilaiFloat = 234.5f;
// Karakter "f" atau "F" pada akhir nilai menyatakan tipe Float;
// selainnya akan dianggap sebagai nilai double.
// Double - Presisi-dua 64-bit standar IEEE 754 untuk Floating Point
// 2^-1074 <= x <= (2-2^-52) * 2^1023
double nilaiDouble = 123.4;
// Boolean - true & false
boolean nilaiBoolean = true;
boolean nilaiBoolean = false;
// Char - Sebuah karakter Unicode 16-bit
char nilaiChar = 'A';
// Variabel "final" tidak dapat di-set kembali nilainya pada objek lain,
final int WAKTU_SAYA_BEKERJA_TIAP_MINGGU = 9001;
// tapi dapat dilakukan inisialisasi diwaktu yang lain.
final double E;
E = 2.71828;
// BigInteger - Bilangan bulat yang memiliki presisi dinamis
//
// BigInteger adalah tipe data yang memungkinkan pembuat program untuk memanipulasi
// bilangan bulat lebih panjang dari 64-bit. Bilangan bulat tersebut tersimpan dalam
// bentuk kumpulan byte (array) dan dimanipulasi menggunakan fungsi yang sudah tersedia
// pada BigInteger
//
// BigInteger dapat diinisialisasi menggunakan kumpulan byte atau teks.
BigInteger nilaiBigInteger = new BigInteger(kumpulanByte);
// BigDecimal - Bilangan signed desimal yang memiliki presisi dinamis
//
// Tipe BigDecimal memiliki dua bagian: sebuah bilangan bulat dengan nilai presisi
// dinamis tanpa skala dan sebuah bilangan bulat skala 32-bit.
// BigDecimal memungkinkan pembuat program untuk memegang kontrol penuh
// terhadap batas desimal. BigDecimal baik digunakan untuk nilai tukar mata uang
// dimana sangat mementingkan presisi nilai desimal.
//
// BigDecimal dapat diinisialisasi dengan int, long, double, String,
// atau dengan melakukan inisialisasi nilai tanpa skala (BigInteger)
// dan nilai dengan skala (int).
BigDecimal nilaiBigDecimal = new BigDecimal(nilaiBigInteger, nilaiInt);
// Perlu diperhatikan konstruktor yang digunakan apakah float atau double
// karena dapat mengakibatkan ketidak-akurasian float/double yang akan digunakan
// dalam BigDecimal. Sebaiknya gunakan nilai String pada konstruktor
// jika membutuhkan nilai pasti.
BigDecimal sepuluhSen = new BigDecimal("0.1");
// Strings
String nilaiString1 = "Ini adalah contoh String!";
// Karakter \n berfungsi untuk membuat baris baru
String nilaiString2 = "Menampilkan baris baru?\nTidak masalah!";
// Karakter \t berfungsi untuk membuat tab antar karakter
String nilaiString3 = "Ingin menambahkan sebuah tab?\tTidak masalah!";
System.out.println(nilaiString1);
System.out.println(nilaiString2);
System.out.println(nilaiString3);
// Larik (array)
// Ukuran array harus ditentukan ketika instansiasi
// Format berikut adalah beberapa cara deklarasi array
// <tipe data>[] <nama variabel> = new <tipe data>[<ukuran array>];
// <tipe data> <nama variabel>[] = new <tipe data>[<ukuran array>];
int[] barisAngka = new int[10];
String[] barisString = new String[1];
boolean barisBoolean[] = new boolean[100];
// Cara lain untuk mendeklarasikan dan menginisialisasi sebuah array
int[] y = {9000, 1000, 1337};
String nama[] = {"Andi", "Budi", "Agus"};
boolean bools[] = new boolean[] {true, false, false};
// Indeks sebuah array - Mengakses sebuah elemen
System.out.println("barisAngka @ 0: " + barisAngka[0]);
// Array menggunakan indeks 0 yang tetap.
barisAngka[1] = 1;
System.out.println("barisAngka @ 1: " + barisAngka[1]); // => 1
// Lainnya yang perlu diketahui
// ArrayLists - Sama seperti array biasa, namum penggunaannya sudah ditentukan,
// dan ukurannya dapat berubah-ubah.
// LinkedLists - Implementasi dari doubly-linked list. Semua operasi yang digunakan
// hampir sama dengan operasi yang dimiliki oleh sebuah doubly-linked list.
// Maps - Sebuah kumpulan objek yang menyatakan hubungan antara kunci dan nilai. Map merupakan
// sebuah interface sehingga tidak dapat diinstansiasi. Jenis kunci dan nilai yang digunakan
// pada Map harus spesifik pada saat instansiasi ketika diimplementasikan pada sebuah kelas.
// Setiap kunci hanya memiliki sebuah nilai, dan hanya muncul sekali.
// HashMaps - Kelas ini menggunakan tabel-hash untuk mengimplementasikan interface Map.
// Hal ini memungkinkan waktu eksekusi ketika melakukan operasi dasar (mengakses
// dan menambahkan elemen) menjadi konstan, meskipun memiliki banyak set data.
///////////////////////////////////////
// Operator
///////////////////////////////////////
System.out.println("\n->Operator");
int i1 = 1, i2 = 2; // Cara singkat untuk deklarasi banyak nilai
// Kemudahan dalam artimatika
System.out.println("1+2 = " + (i1 + i2)); // => 3
System.out.println("2-1 = " + (i2 - i1)); // => 1
System.out.println("2*1 = " + (i2 * i1)); // => 2
System.out.println("1/2 = " + (i1 / i2)); // => 0 (int/int menghasilkan int juga)
System.out.println("1/2 = " + (i1 / (double)i2)); // => 0.5
// Modulus
System.out.println("11%3 = "+(11 % 3)); // => 2
// Operator Perbandingan
System.out.println("3 == 2? " + (3 == 2)); // => false
System.out.println("3 != 2? " + (3 != 2)); // => true
System.out.println("3 > 2? " + (3 > 2)); // => true
System.out.println("3 < 2? " + (3 < 2)); // => false
System.out.println("2 <= 2? " + (2 <= 2)); // => true
System.out.println("2 >= 2? " + (2 >= 2)); // => true
// Operator Boolean
System.out.println("3 > 2 && 2 > 3? " + ((3 > 2) && (2 > 3))); // => false
System.out.println("3 > 2 || 2 > 3? " + ((3 > 2) || (2 > 3))); // => true
System.out.println("!(3 == 2)? " + (!(3 == 2))); // => true
// Operator Bitwise
/*
~ Unary bitwise complement
<< Signed left shift
>> Signed/Arithmetic right shift
>>> Unsigned/Logical right shift
& Bitwise AND
^ Bitwise exclusive OR
| Bitwise inclusive OR
*/
// Peningkatan
int i = 0;
System.out.println("\n->Pengurangan/Peningkatan");
// Operator ++ dan -- masing-masing melakukan peningkatan dan penurunan 1 nilai.
// Jika diletakkan sebelum variabel, maka akan di tambah/kurang 1 sebelum dilakukan perintah lainnya;
// jika setelah variabel, maka akan ditambah/kurang 1 setelah dilakukan perintah lainnya;
System.out.println(i++); // i = 1, prints 0 (peningkatan setelahnya)
System.out.println(++i); // i = 2, prints 2 (peningkatan sebelumnya)
System.out.println(i--); // i = 1, prints 2 (pengurangan setelahnya)
System.out.println(--i); // i = 0, prints 0 (pengurangan sebelumnya)
///////////////////////////////////////
// Struktur Kontrol
///////////////////////////////////////
System.out.println("\n->Struktur Kontrol");
// Perintah "if" hampir sama dengan bahasa C
int j = 10;
if (j == 10) {
System.out.println("Saya ditampilkan");
} else if (j > 10) {
System.out.println("Saya tidak ditampilkan");
} else {
System.out.println("Saya juga tidak ditampilkan");
}
// Perulangan "while"
int fooWhile = 0;
while(fooWhile < 100) {
System.out.println(fooWhile);
// Tingkatkan penghitung
// 100 kali iterasi, fooWhile 0,1,3,...,99
fooWhile++;
}
System.out.println("Nilai fooWhile: " + fooWhile);
// Perulangan "do...while"
int fooDoWhile = 0;
do {
System.out.println(fooDoWhile);
// Tingkatkan penghitung
// 99 kali iterasi, fooDoWhile 0->99
fooDoWhile++;
} while(fooDoWhile < 100);
System.out.println("Nilai fooDoWhile: " + fooDoWhile);
// Perulangan "for"
// Struktur perulangan "for" => for(<awal_pernyataan>; <kondisi>; <langkah/tahapan>)
for (int fooFor = 0; fooFor < 10; fooFor++) {
System.out.println(fooFor);
// 10 kali iterasi, foofor 0-9
}
System.out.println("Nilai fooFor: " + fooFor);
// Perulangan "for" bertingkat dengan label "exit"
outer:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (i == 5 && j ==5) {
break outer;
// Menghentikan semua perulangan, tidak hanya perulangan bagian dalam saja
}
}
}
// Perulangan "for each"
// Perulangan "for" juga dapat melakukan iterasi terhadap larik (array) dari objek
// yang mana mengimplementasikan interface Ieterable.
int[] fooList = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// Struktur perulangan "for each" => for (<objek> : <iterable>)
// dibaca: setiap elemen dalam iterable
// catatan: tipe objek harus sama dengan tipe iterable
for (int bar : fooList) {
System.out.println(bar);
// Melakukan interasi sebanyak 9 kali dan menampilkan 1-9 tiap baris
}
// "switch case"
// "switch" dapat digunakan pada byte, short, char, dan tipe data bilangan bulat (int).
// "switch" juga dapat digunakan pada tipe "enum" (dijelaskan nanti), kelas String,
// dan beberapa kelas khusus yang mengandung tipe data primitif:
// Character, Byte, Short, dan Integer.
int bulan = 3;
String bulanString;
switch (bulan) {
case 1: bulanString = "Januari";
break;
case 2: bulanString = "Februari";
break;
case 3: bulanString = "Maret";
break;
default: bulanString = "Bulan lainnya";
break;
}
System.out.println("Hasil switch case: " + bulanString);
// Mulai dari Java 7 keatas, "switch" memiliki format:
String jawabanSaya = "mungkin";
switch(jawabanSaya) {
case "ya":
System.out.println("Anda menjawab ya.");
break;
case "tidak":
System.out.println("Anda menjawab tidak.");
break;
case "mungkin":
System.out.println("Anda menjawab mungkin.");
break;
default:
System.out.println("Anda menjawab " + jawabanSaya);
break;
}
// Pengkondisian dengan cara singkat
// Karakter '?' dapat digunakan untuk penilaian atau logika secara cepat antara dua pernyataan.
// Dibaca "Jika (pernyataan) adalah benar, gunakan <nilai pertama>, sisanya gunakan <nilai kedua>
int foo = 5;
String bar = (foo < 10) ? "A" : "B";
System.out.println(bar); // Menampilkan A, karena pernyataannya benar
////////////////////////////////////////
// Konversi Data dan Tipe Data (Typecasting)
////////////////////////////////////////
// Konversi Data
// Konversi String ke Integer
Integer.parseInt("123"); // menghasilkan nilai versi Integer dari "123"
// Konversi Integer ke String
Integer.toString(123); // menghasilkan nilai versi String dari 123
// Untuk konversi lainnya silakan coba kelas berikut:
// Double
// Long
// String
// Typecasting
// Objek dalam Java juga dapat dikonversi, banyak penjelasan dan aturan
// dengan beberapa konsep sederhana. Silakan cek di alamat berikut:
// http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
///////////////////////////////////////
// Kelas dan Fungsi
///////////////////////////////////////
System.out.println("\n->Kelas & Fungsi");
// (penjelasan mengenai kelas "Sepeda" ada dibawah)
// Gunakan "new" untuk melakukan instansiasi pada kelas
Sepeda laju = new Sepeda();
// Memanggil method objek
laju.tambahKecepatan(3); // Dapat juga digunakan "setter" dan "getter" method
laju.setIrama(100);
// Method "toString()" menghasilkan representasi string dari objek.
System.out.println("informasi jalur: " + laju.toString());
// Dua Pasang Inisialisasi
// Bahasa Java tidak memiliki sintaks untuk membuat koleksi dari "static" sekaligus
// dengan mudah, kecuali dengan cara berikut:
private static final Set<String> NEGARA = new HashSet<String>();
static {
validCodes.add("INDONESIA");
validCodes.add("MALAYSIA");
validCodes.add("SINGAPURA");
}
// Terdapat cara yang baik untuk menulis skrip dengan mudah,
// dengan menggunakan Dua-Kurung Kurawal Inisialisasi (Double Brace Initialization)
private static final Set<String> NEGARA = new HashSet<String>() {{
add("INDONESIA");
add("MALAYSIA");
add("SINGAPURA");
}}
// Kurung kurawal yang pertama membuat sebuah AnonymousInnerClas
// dan kurung kurawal yang kedua mendeklarasikan instance dari blok
// inisialisasi. Blok ini kemudian dipanggil ketika InnerClass dibentuk.
// Cara ini tidak hanya berfungsi pada koleksi data, juga dapat digunakan
// pada semua kelas bukan-"final".
} // Akhir dari method utama
} // Akhir dari kelas BelajarJava
// Kelas bukan-"public" lainnya dapat dimasukkan kedalam satu dokumen .java,
// namun tidak dianjurkan, sebaiknya memisahkan menjadi beberapa dokumen terpisah.
// Sintaks pendeklarasian kelas:
//<public/private/protected> class <nama kelas> {
// // isi data, konstruktor, dan fungsi.
// // dalam Java, fungsi biasa disebut juga "method"
// }
class Sepeda {
// Variabel dari kelas Sepeda
public int irama; // Public: dapat diakses dari manapun
private int kecepatan; // Private: hanya dapat diakses dari dalam kelas
protected int rodaGigi; // Protected: dapat diakses dari dalam kelas dan turunan kelas
String nama; // Default: hanya dapat diakses kelas yang berada dalam paket yang sama
static String namaKelas; // Variabel "static"
// Blok Static
// Java tidak memiliki implementasi untuk konstruktor "static", namun
// memiliki blok status yang dapat digunakan untuk inisialisasi variabel
// dalam kelas (variabel "static").
// Blok ini akan dipanggil secara otomatis ketika kelas dijalankan.
static {
namaKelas = "Sepeda";
}
// Konstruktor adalah salah satu cara untuk membuat kelas
// Ini adalah bagian konstruktor
public Sepeda() {
// Dapat juga dipanggil konstruktor lainnya:
// this(1, 50, 5, "Bontrager");
rodaGigi = 1;
irama = 50;
kecepatan = 5;
nama = "Bontrager";
}
// Ini adalah bagian konstruktor yang menggunakan argumen (parameter)
public Sepeda(int iramaAwal, int kecepatanAwal, int rodaGigiAwal,
String nama) {
this.rodaGigi = rodaGigiAwal;
this.irama = iramaAwal;
this.kecepatan = kecepatanAwal;
this.nama = nama;
}
// Sintaks untuk method:
// <public/private/protected> <tipe kembalian> <nama fungsi>(<args>)
// Kelas Java terkadang mengimplementasikan "getters" dan "setters" untuk data.
// Sintaks untuk deklarasi method:
// <public/private/protected> <tipe kembalian> <nama fungsi>(<args>)
public int getIrama() {
return irama;
}
// Tipe "void" tidak memiliki kembalian (return) nilai
public void setIrama(int nilaiBaru) {
irama = nilaiBaru;
}
public void setRodaGigi(int nilaiBaru) {
rodaGigi = nilaiBaru;
}
public void tambahKecepatan(int nilaiTambahan) {
kecepatan += nilaiTambahan;
}
public void kurangiKecepatan(int nilaiPengurangan) {
kecepatan -= nilaiPengurangan;
}
public void setNama(String namaBaru) {
nama = namaBaru;
}
public String getNama() {
return nama;
}
// Method untuk menampilkan nilai dari tiap atribut yang dimiliki objek Sepeda.
@Override // Diturunkan dari kelas "Object" (Pustaka Java).
public String toString() {
return "roda gigi: " + rodaGigi + " irama: " + irama + " kecepatan: " + kecepatan +
" nama: " + nama;
}
} // akhir dari kelas Sepeda
// PennyFarthing adalah kelas turunan dari Sepeda
class PennyFarthing extends Sepeda {
// (Penny Farthings adalah sepeda dengan roda depan yang besar,
// dan tidak memiliki roda gigi.)
// (Penny Farthings are those bicycles with the big front wheel.
// They have no gears.)
public PennyFarthing(int startCadence, int startSpeed) {
// Call the parent constructor with super
super(startCadence, startSpeed, 0, "PennyFarthing");
}
// You should mark a method you're overriding with an @annotation.
// To learn more about what annotations are and their purpose check this
// out: http://docs.oracle.com/javase/tutorial/java/annotations/
@Override
public void setRodaGigi(int rodaGigi) {
roda rodaGigi = 0;
}
}
// Interfaces
// Sintaks untuk deklarasi Interface
// <level akses> interface <nama interface> extends <interface induk> {
// // Konstan
// // Deklarasi method
// }
// Contoh - Makanan:
public interface dapatDimakan {
public void makan(); // Setiap kelas yang menggunakan interface "dapatDimakan",
// harus mengimplementasikan method "makan".
}
public interface dapatDicerna {
public void cerna();
}
// Membuat kelas dengan mengimplementasikan dua interface dalam satu waktu.
public class Buah implements dapatDimakan, dapatDicerna {
@Override
public void makan() {
// ...
}
@Override
public void cerna() {
// ...
}
}
// Dalam Java, kelas hanya dapat diturunkan sekali, tapi dapat mengimplementasikan
// banyak interface. Contoh:
public class ContohKelas extends ContohKelasInduk implements InterfaceSatu,
InterfaceDua {
@Override
public void MethodInterfaceSatu() {
}
@Override
public void MethodInterfaceDua() {
}
}
// Kelas Abstrak (Abstract)
// Sintaks untuk deklarasi kelas abstrak
// Abstract Class declaration syntax
// <level akses> abstract <nama kelas abstrak> extends <induk kelas abstrak> {
// // Konstan dan variabel
// // Deklarasi method
// Menjadikan kelas sebagai abstrak adalah memungkinkan kelas berisi method abstrak
// yang harus didefinisikan pada kelas turunannya. Mirip dengan Interface, kelas abstrak
// tidak dapat dilakukan instansiasi, namun harus diturunkan pada kelas lain dan method abstrak
// harus didefinisikan. Perbedaannya dengan Interface ialah kelas abstrak dapat berisi method
// kongkrit dan method abstrak. Pada Interface method tidak dapat memiliki isi, artinya hanya
// method statis, dan variabel langsung ditentukan menjadi final, tidak seperti kelas abstrak.
// Kelas abstrak juga dapat memiliki method "main".
public abstract class Hewan
{
public abstract void bersuara();
// Method biasa dapat memiliki isi
public void makan()
{
System.out.println("Saya adalah hewan dan Saya makan.");
// Catatan: Kita dapat mengakses variabel private yang ada disini.
umur = 30;
}
// Tidak perlu dilakukan inisialisasi, berbeda dengan Interface
// sebuah variabel adalah final dan harus dilakukan inisialisasi.
protected int umur;
public void tampilkanUmur()
{
System.out.println(umur);
}
// Kelas abstrak dapat memiliki fungsi utama (main).
public static void main(String[] args)
{
System.out.println("Saya adalah kelas abstrak!");
}
}
class Kucing extends Hewan
{
// Catatan: kelas ini harus melakukan override method abstrak
// yang ada pada kelas abstrak (induk).
@Override
public void bersuara()
{
System.out.println("Moe");
// umur = 30; ==> ERROR! umur merupakan variabel private pada abstrak Hewan
}
// CATATAN: Akan muncul error jika menggunakan
// keterangan @Override pada method utama (main),
// Java tidak mengizinkan hal tersebut.
// Kejadian ini sering disebut sebagai METHOD HIDING.
// Pertanyaan-jawaban yang menarik dapat dilihat: http://stackoverflow.com/questions/16313649/
public static void main(String[] args)
{
Kucing moe = new Kucing();
noe.bersuara();
moe.makan();
moe.tampilkanUmur();
}
}
// Kelas Final
// Sintaks untuk deklarasi kelas Final
// <level akses> final <nama kelas final> {
// // Konstann dan variabel
// // Deklarasi method
// }
// Kelas Final merupakan kelas yang tidak dapat diturunkan sehingga menjadikan
// method tersebut turunan method terakhir. Disisi lain, kelas final merupakan
// lawan dari kelas abstrak karena kelas abstrak dapat diturunkan lagi, sedangkan
// kelas final tidak dapat diturunkan lagi.
public final class Serigala extends Hewan
{
// Catatan: method abstrak harus di-override pada kelas abstrak.
@Override
public void bersuara()
{
System.out.println("Auuww");
}
}
// Method Final
public abstract class Mamalia()
{
// Sintaks untuk method final:
// <level akses> final <tipe kembalian> <nama fungsi>(<args>)
// Method final, seperti kelas final tidak dapat di-override oleh kelas turunan,
// sehingga menjadikannya implementasi terakhir dari method.
public final boolean apakahBerdarahDingin()
{
return true;
}
}
// Tipe Enum
//
// Tipe Enum merupakan tipe data spesial yang memungkinkan sebuah nilai dijadikan
// konstan awal (predefined). Variabel setidaknya harus memiliki nilai yang sama
// dengan salah satu dari enum-enum yang telah ditentukan. Karena nilainya merupakan
// konstan, untuk itu penamaannya menggunakan huruf kapital (uppercase). Dalam Java,
// Enum didefinisikan dengan kata kunci "enum". Contohnya nama-nama hari dalam semunggu:
public enum Hari {
SENIN, SELASA, RABU, KAMIS,
JUMAT, SABTU, MUNGGU
}
// Cara menggunakan Enum:
public class CobaEnum {
// Variabel Enum
Hari hari;
// Konstruktor
public CobaEnum(Hari hari) {
this.hari = hari;
}
public void tampilkanKeterangan() {
switch (day) {
case SENIN:
System.out.println("Senin adalah hari yang menyebalkan.");
break;
case JUMAT:
System.out.println("Jumat adalah hari yang singkat.");
break;
case SABTU:
case MINGGU:
System.out.println("Akhir pekan adalah hari yang menyenangkan.");
break;
default:
System.out.println("Hari kerja yang biasa saja.");
break;
}
}
public static void main(String[] args) {
CobaEnum hariPertama = new CobaEnum(Hari.SENIN);
hariPertama.tampilkanKeterangan(); // Senin adalah hari yang menyebalkan.
CobaEnum hariKetiga = new CobaEnum(Hari.RABU);
hariPertama.tampilkanKeterangan(); // Hari kerja yang biasa saja.
}
}
// Tipe enum memiliki banyak kegunaan selain yang dicontohkan diatas.
// Tipe enum dapat memiliki isi seperti method dan variabel.
// Penjelasan lebih detail di https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
```
## Referensi Lainnya
Link-link berikut hanya menyediakan pemahaman lebih lanjut mengenai topik diatas.
Tip, trik, dan contoh lainnya dapat melakukan pencarian melalui Google atau mesin pencari yang lain.
**Panduan resmi Oracle**
* [Java Tutorial Trail from Sun / Oracle](http://docs.oracle.com/javase/tutorial/index.html)
* [Java Access level modifiers](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)
* [Object-Oriented Programming Concepts](http://docs.oracle.com/javase/tutorial/java/concepts/index.html):
* [Inheritance](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)
* [Polymorphism](http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html)
* [Abstraction](http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html)
* [Exceptions](http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html)
* [Interfaces](http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html)
* [Generics](http://docs.oracle.com/javase/tutorial/java/generics/index.html)
* [Java Code Conventions](http://www.oracle.com/technetwork/java/codeconvtoc-136057.html)
**Tutorial dan Praktik Online**
* [Learneroo.com - Learn Java](http://www.learneroo.com)
* [Codingbat.com](http://codingbat.com/java)
**Buku**:
* [Head First Java](http://www.headfirstlabs.com/books/hfjava/)
* [Thinking in Java](http://www.mindview.net/Books/TIJ/)
* [Objects First with Java](http://www.amazon.com/Objects-First-Java-Practical-Introduction/dp/0132492660)
* [Java The Complete Reference](http://www.amazon.com/gp/product/0071606300)