OOP Java 05 Encapsulation & Inheritance
Materi yg akan dibahas : Encapsulation Access control modifier Get & set methods Constructor Inheritance
Inheritance Keyword this & super
Overloading
Overloading Constructors Overloading Methods
Encapsulation (pembungkusan) Atribut & method digabung menjadi satu Æ kelas / objek Akses terhadap atribut & method dapat diatur Æ akses control modifier & get/set method
Access control modifier Modifier private default protected public
=class =package subclass universe ya tdk tdk tdk ya ya tdk tdk ya ya ya tdk ya ya ya ya
Modifier default berlaku jika tidak ditulis modifier lain (tanpa ditulis secara eksplisit). Access control subclass tidak boleh lebih sempit / tertutup dari kelas induknya
Get / set method (1) public class Mobil1 { private String tipe; private int jumlahRoda; public void setTipe(String ptipe) { tipe = ptipe; } public void setJumlahRoda(int pjumlah_roda) { jumlahRoda = pjumlah_roda; } public String getTipe() { return tipe; } public int getJumlahRoda() { return jumlahRoda; } }
Get / set method (2) Latihan :
Buatlah kelas TestMobil1 dan coba mengakses atribut kelas Mobil1 secara langsung & menggunakan get & set method.
Good practice : Biasakan membuat & menggunakan get / set method.
Get / set method (3) public class TestMobil1 { public static void main(String[] args) { Mobil1 mbl = new Mobil1(); mbl.tipe = “Jeep”; mbl.jumlahRoda = 4; System.out.println(“Tipe : ” + mbl.tipe); System.out.println(“Jml Roda : ” + mbl.jumlahRoda); mbl.setTipe(“Bus”); mbl.setJumlahRoda(6); System.out.println(“Tipe : ” + mbl.getTipe()); System.out.println(“Jml Roda : ” + mbl.getJumlahRoda()); } }
Get / set method (4) Bagaimana caranya mengakses atribut yg aksesnya terbatas ? jawab : menggunakan get (ambil) & set (ubah) method. Get & set method dibuat didalam kelas supaya pihak luar tidak mengakses atribut secara langsung, sehingga kontrol & konsistensi dapat dijaga. Get & set method biasanya memiliki akses kontrol public.
Constructor (1) public class Mobil2 { private String tipe; private int jumlahRoda; public Mobil2() { //default constructor tipe = “tidak diketahui”; jumlahRoda = 4; System.out.println(“Mobil2() dijalankan”); } public Mobil2(String ptipe, int pjroda) { //user-defined constructor tipe = ptipe; jumlahRoda = pjroda; System.out.println(“Mobil2(String ptipe, int pjroda) dijalankan”); } // get & set methods letakkan disini }
Constructor (2) public class TestMobil2 { public static void main(String[] args) { Mobil2 mob1 = new Mobil2(); // default constructor dipanggil Mobil2 mob2 = new Mobil2(“SUV”, 4); //user-defined System.out.println(“Tipe mobil 1 : ” + mob1.getTipe()); System.out.println(“Jml roda mobil 1 : ” + mob1.getJumlahRoda()); mob1.setTipe(“Truck”); mob1.setJumlahRoda(6); System.out.println(“Tipe mobil 1 : ” + mob1.getTipe()); System.out.println(“Jml roda mobil 1 : ” + mob1.getJumlahRoda()); System.out.println(“Tipe mobil 2 : ” + mob2.getTipe()); System.out.println(“Jml roda mobil 2 : ” + mob2.getJumlahRoda()); } }
Constructor (3) Method khusus yg otomatis dijalankan ketika objek dibuat dari kelasnya. Memiliki nama yg sama dengan nama kelasnya Dalam satu kelas bisa terdapat beberapa konstruktor (dengan parameter yg berbeda2). Default constructor adalah constructor yg tidak memiliki parameter. Format constructor :
public
(<parameter>) { }
Constructor dapat digunakan untuk inisialisasi
Constructor (4) Lakukanlah hal berikut :
Cobalah jalankan Mobil2 & TestMobil2, amatilah constructor mana saja yg dijalankan. Cobalah buang (ubah menjadi komentar) semua constructor dan jalankan kelas Testnya. Apa yg terjadi ? Cobalah buang (ubah menjadi komentar) default constructor dan jalankan kelas Testnya. Apa yg terjadi ?
Jika tidak terdapat konstruktor secara eksplisit, maka secara otomatis dibuatkan sebuah default constructor. Sebaliknya jika terdapat constructor, maka default constructor tidak akan dibuatkan secara otomatis. Good practice : Biasakan membuat semua constructor (default, user defined dg 1 s/d n parameter)
Inheritance (1) Komputer
Desktop
Games
Notebook
Multimedia
studentNb
Server
subNb
Internet
LAN
MultimediaNb Video
Audio Graphic
RPG Arcade
MailSrv
ChatSrv
WebSrv
GameSrv
Inheritance (2) public class Angkot extends Mobil2 { private String jurusan; public Angkot() { System.out.println(“Angkot() dijalankan”); } //buat get & set untuk atribut jurusan } //---------------------------------------------------------------------------------------------------------public class TestAngkot { public static void main(String[] args) { Angkot a = new Angkot(); a.setTipe(“Kijang”); a.setJumlahRoda(4); a.setJurusan(“Pasteur – Stasiun Hall”); System.out.println(“Angkot : “ + a.getJurusan() + “ “ + a.getTipe() + “ “ + a.getJumlahRoda(); } }
Inheritance (3) public class MobilSport extends Mobil2 { private String nama; private int maxSpeed; public MobilSport() { //default constructor nama = “nama mobil sport”; maxSpeed = 300; System.out.println(“MobilSport() dijalankan”); } public MobilSport(String pnama, int pmaxSpeed) { //user-defined constr super(“sport”, 4); nama = pnama; maxSpeed = pmaxSpeed; System.out.println(“MobilSport(String pnama, int pmaxSpeed) dijalankan”); } public MobilSport(String pnama) { //user-defined constr this(pnama, 350); System.out.println(“MobilSport(String pnama) dijalankan”); } // get & set methods untuk atribut nama & maxSpeed dibuat disini }
Inheritance (4) public class TestMobilSport { public static void main(String[] args) { MobilSport mbl1 = new MobilSport(); MobilSport mbl2 = new MobilSport(“Toyota Celica”, 250); MobilSport mbl3 = new MobilSport(“Ferrari F50”); System.out.println(“Tipe mbl1 : ” + mbl1.getTipe()); System.out.println(“Jumlah roda mbl1 : ” + mbl1.getJumlahRoda()); System.out.println(“Nama mbl1 : ” + mbl1.getNama()); System.out.println(“Max Speed mbl1 : ” + mbl1.getMaxSpeed()); System.out.println(“Tipe mbl2 : ” + mbl2.getTipe()); System.out.println(“Jumlah roda mbl2 : ” + mbl2.getJumlahRoda()); System.out.println(“Nama mbl2 : ” + mbl2.getNama()); System.out.println(“Max Speed mbl2 : ” + mbl2.getMaxSpeed()); System.out.println(“Tipe mbl3 : ” + mbl3.getTipe()); System.out.println(“Jumlah roda mbl3 : ” + mbl3.getJumlahRoda()); System.out.println(“Nama mbl3 : ” + mbl3.getNama()); System.out.println(“Max Speed mbl3 : ” + mbl3.getMaxSpeed()); } }
Inheritance (5) Inheritance (pewarisan) digunakan pada kelas2 yg memiliki hubungan generalization-specification atau whole-part. Mewarisi semua atribut & method kelas induknya. Menggunakan keyword extends. Keyword super(…) digunakan untuk memanggil konstruktor kelas induknya (jika diperlukan). Jika digunakan harus merupakan statement pertama dari constructor. Keyword this(…) digunakan untuk memanggil konstruktor lain dikelas yg sama. Keyword super.[atribut | method()] : memanggil atribut / method dari kelas induknya Keyword this.[atribut | method()] : memanggil atribut / method dari objek / kelas yg sama
Overloading (1) Overloading : constructor / method dalam kelas yg sama yg memiliki nama sama, tetapi signature (tipe / jumlah / urutan parameter) berbeda. Ketika dipergunakan, method mana yg akan dipanggil ditentukan secara otomatis berdasarkan kesesuaian tipe / jumlah / urutan parameternya. Perhatian : jangan tertukar dengan overriding. Overriding : method pada kelas anak yg memiliki nama, return type & parameter yg sama dengan method pd kelas induknya.
Overloading – Constructors (2) public class Kotak { private String id; private int panjang; private int lebar; public Kotak(String pid, int p, int l) { id = pid; panjang = p; lebar = l; } public Kotak(int p, int l) { this("Unknown", p, l); //id = "Unknown"; //panjang = p; //lebar = l; } public Kotak() { this(0, 0); //id = "Unknown"; //panjang = 0; //lebar = 0; } }
this(0,0) memanggil constructor Kotak(int p, int l) this(“Unknown”, p, l) memanggil constructor Kotak(String pid, int p, int l)
Overloading – Constructors (3) Meng-Overload Constructor sering terjadi karena didalam sebuah kelas biasanya terdapat beberapa konstruktor. Reference this dapat digunakan untuk meneruskan pemanggilan ke constructor yang lain dalam kelas yang sama. Berguna supaya tidak mengulang kode yang sama di setiap constructor.
Overloading – Methods (4)
public class Mahasiswa { private String nrp = “0472001”; private String nama = “Andri”; private int nilai_akhir = 80; private char nilai_huruf = ‘A’;
//constructors … //methods public void Cari(String pnrp) { //…algoritma pencarian disini System.out.println(“Ketemu : ” + nrp); }
public class TestMahasiswa { public static void main(String[] ar) { Mahasiswa mhs = new Mahasiswa(); //terusin ya…kan udah bisa….
} }
public void Cari(String pnama) { //error already defined //… algoritma pencarian disini System.out.println(“Ketemu : ” + nama); } public void Cari(int pnilai_akhir) { //… algoritma pencarian disini System.out.println(“Ketemu : ” + nilai_akhir); } public void Cari(char pnilai_huruf) { //… algoritma pencarian disini System.out.println(“Ketemu : ” + nilai_huruf); } }
Overloading Methods (5) Sama seperti constructor, method juga dapat di overload Jika tipe, jumlah & urutan parameter sama Æ error. Apa penyebabnya (tanya ken-apa) ?
Overloading Methods (6) public class TypeConv { public static void main(String[] args) { Overload2 ov = new Overload2(); int i = 10; double d = 12.5; byte b = 77; short s = 10; float f = 3.14F; ov.f(i); ov.f(d); ov.f(b); ov.f(s); ov.f(f);
//yg dipanggil f(int) //yg dipanggil f(double) //yg dipanggil f(int) - konversi tipe otomatis //yg dipanggil f(int) - konversi tipe otomatis //yg dipanggil f(double) - konversi tipe otomatis
} } class Overload2 { void f(int x) { System.out.println("Didalam fungsi f(int), x = " + x); } void f(double x) { System.out.println("Didalam fungsi f(double), x = " + x); } }
Konversi tipe data otomatis dapat berpengaruh terhadap pemanggilan method yg di overload
Programming everyday keeps The Brain Healthy