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