//PROGRAM 7-9
}
class A { A() { System.out.println("Constructor dari kelas A"); }
//PROGRAM 7-15 // Mendefinisikan kelas abstract abstract class A { // method abstrak, tidak memiliki kode
} class B extends A {
implementasi abstract public void coba(); B() { // kelas abstrak masing diizinkan untuk System.out.println("Constructor dari kelas B");
mendefinisikan
}
// method non-abstrak
}
public void cobajuga() {
class C extends B {
System.out.println("Method non-abstrak " +
C() {
"di dalam kelas abstrak");
System.out.println("Constructor dari kelas C"); }
} }
}
class B extends A {
class DemoConstructorPenurunan {
// override method coba()
public static void main(String[] args) {
public void coba() {
System.out.println(
System.out.println("Method di dalam kelas B");
"Pada saat membentuk objek dari kelas A:");
}
A obj1 = new A();
}
System.out.println(
class DemoKelasAbstrak1 {
"\nPada saat membentuk objek dari kelas B:");
public static void main(String[] args) { A ref; // mendeklarasikan referensi ke kelas A
B obj2 = new B(); System.out.println( "\nPada saat membentuk objek dari kelas C:");
B obj = new B(); ref = obj; // ref menunjuk ke objek dari kelas B ref.coba(); dalam B
// memanggil method coba() di
C obj3 = new C(); ref.cobajuga(); // memanggil method }
cobajuga() di dalam A
}
return (sisi * sisi);
}
}
//PROGRAM 7-16
}
// Mendefinisikan kelas abstract
class Segitiga extends Bentuk {
abstract class Bentuk {
private double alas;
// method abstrak, tidak memiliki kode
private double tinggi;
implementasi Segitiga(int a, int t) { abstract public double luas(); alas = a; } tinggi = t; class PersegiPanjang extends Bentuk { } private double panjang; public double luas() { private double lebar; System.out.println("Dalam objek segitiga:"); PersegiPanjang(int p, int l) { return ((alas * tinggi)/2); panjang = p; } lebar = l; } } class Lingkaran extends Bentuk { public double luas() { private double jarijari; System.out.println("Dalam objek persegi panjang:");
private final double PI = 3.1416; Lingkaran(int r) {
return (panjang * lebar);
jarijari = r;
} }
}
class BujurSangkar extends Bentuk {
public double luas() {
private double sisi;
System.out.println("Dalam objek lingkaran:");
BujurSangkar(int s) {
return (PI * jarijari * jarijari); }
sisi = s; }
}
public double luas() {
class DemoKelasAbstrak2 {
System.out.println("Dalam objek bujursangkar:");
public static void main(String[] args) {
Bentuk obj;
System.out.println("Luas : " + obj.luas());
// Baris kode di bawah ini SALAH,
System.out.println();
// karena kelas abstrak tidak dapat
}
diinstansiasi } //obj = new Bentuk(); // SALAH PersegiPanjang pp = new PersegiPanjang(5, 3); BujurSangkar bs = new BujurSangkar(4);
//PROGRAM 7-1 class A {
Segitiga st = new Segitiga(4, 3); private int a; Lingkaran lk = new Lingkaran(2); // obj mengacu pada objek PersegiPanjang public void setA(int nilai) { obj = pp; a = nilai; // akan memanggil method yang terdapat pada }
PersegiPanjang
public int getA() {
System.out.println("Luas : " + obj.luas());
return a;
System.out.println(); }
// obj mengacu pada objek BujurSangkar obj = bs;
}
// akan memanggil method yang terdapat pada
// membuat kelas turunan (subclass) dari kelas A
BujurSangkar
class B extends A {
System.out.println("Luas : " + obj.luas());
private int b;
System.out.println();
public void setB(int nilai) {
// obj mengacu pada objek Segitiga
b = nilai;
obj = st;
}
// akan memanggil method yang terdapat pada
public int getB() {
Segitiga
return b;
System.out.println("Luas : " + obj.luas()); }
System.out.println(); // obj mengacu pada objek Lingkaran obj = lk; // akan memanggil method yang terdapat pada Lingkaran
} class DemoKelasTurunan1 { public static void main(String[] args) {
// melakukan instansiasi terhadap kelas B
return b;
B obj = new B();
}
// mengeset nilai objek dari kelas B
}
obj.setA(100);
// membuat kelas turunan (subclass) dari kelas B
obj.setB(200);
class C extends B {
// mendapatkan nilai yang terdapat dalam
private int c;
objek dari kelas B public void setC(int nilai) { System.out.println("Nilai a : " + obj.getA()); c = nilai; System.out.println("Nilai b : " + obj.getB()); } } public int getC() { } return c; } //PROGRAM 7-2 } class A { class DemoKelasTurunan2 { private int a; public static void main(String[] args) { public void setA(int nilai) { // melakukan instansiasi terhadap kelas C a = nilai; C obj = new C(); } // mengeset nilai dari kelas C public int getA() { obj.setA(100); return a; obj.setB(200); } obj.setC(300); }
// mendapatkan nilai yang terdapat dalam
// membuat kelas turunan (subclass) dari kelas A
kelas C
class B extends A {
System.out.println("Nilai a : " + obj.getA());
private int b;
System.out.println("Nilai b : " + obj.getB());
public void setB(int nilai) {
System.out.println("Nilai c : " + obj.getC());
b = nilai;
}
}
}
public int getB() {
//PROGRAM 7-12
class Induk {
class A {
// mendefinisikan method test() tanpa
private int a;
parameter public void setA(int nilai) { public void test() { a = nilai; System.out.println("Method di dalam kelas }
Induk");
public int getA() {
}
return a;
} }
class Turunan extends Induk {
public void tampilkanNilai() {
// melakukan overload terhadap method test(), bukan override.
System.out.println("Nilai a: " + getA());
public void test(String s) { System.out.println("Method di dalam kelas Turunan"); System.out.println("s : \"" + s + "\"");
} } class B extends A { private int b;
}
public void setB(int nilai) {
}
b = nilai;
class DemoOverloadTurunan { }
public static void main(String[] args) {
public int getB() {
Turunan obj = new Turunan();
return b;
// memanggil method test() yang terdapat pada kelas Induk
}
obj.test(); System.out.println();
// melakukan override terhadap method tampilkanNilai() // yang terdapat pada kelas A
// memanggil method test() yang terdapat pada kelas Turunan
public void tampilkanNilai() {
obj.test("Contoh overload pada proses
System.out.println("Nilai b: " + getB());
pewarisan"); } } } } class DemoOverride1 { public static void main(String[] args) { //PROGRAM 7-10
// melakukan override terhadap method
B obj = new B();
tampilkanNilai() obj.setA(100); // yang terdapat pada kelas A obj.setB(200); public void tampilkanNilai() {
// akan memanggil method yang terdapat pada
super.tampilkanNilai(); // memanggil method
kelas B
dalam kelas A obj.tampilkanNilai(); System.out.println("Nilai b: " + getB()); } } } //PROGRAM 7-11 class A {
} class DemoOverride2 { public static void main(String[] args) {
private int a; public void setA(int nilai) { B obj = new B();
a = nilai;
obj.setA(100); } obj.setB(200); public int getA() { // akan memanggil method yang terdapat pada return a;
kelas B
}
obj.tampilkanNilai();
public void tampilkanNilai() { System.out.println("Nilai a: " + getA());
} }
} }
//PROGRAM 7-13
class B extends A {
// Mendefinisikan kelas induk
private int b;
class Penyanyi {
public void setB(int nilai) {
public void bernyanyi() {
b = nilai;
System.out.println("Karakteristik nadanya " +
}
"belum didefinisikan");
public int getB() { return b; }
} } // Mendefinisikan kelas-kelas turunan dari kelas Penyanyi
p = musmujiono; // p mengacu pada objek
class PenyanyiJazz extends Penyanyi { // melakukan override terhadap method bernyanyi()
PenyanyiJazz // akan memanggil method pada kelas PenyanyiJazz
public void bernyanyi() { p.bernyanyi();
System.out.println("Bernyanyi dengan irama Jazz");
p = audi; // p mengacu pada objek PenyanyiPop
} // akan memanggil method pada kelas }
PenyanyiPop
class PenyanyiPop extends Penyanyi {
p.bernyanyi(); p = inul; // p mengacu pada objek
// melakukan override terhadap method bernyanyi()
PenyanyiDangdut // akan memanggil method pada kelas
public void bernyanyi() {
PenyanyiDangdut
System.out.println("Bernyanyi dengan irama
p.bernyanyi();
Pop"); } } } } class PenyanyiDangdut extends Penyanyi { // melakukan override terhadap method bernyanyi() public void bernyanyi() {
//PROGRAM 7-14 // Mendefinisikan kelas induk class Bentuk {
System.out.println("Bernyanyi dengan irama
public double luas() {
Dangdut"); System.out.println("Tidak didefinisikan"); } return 0; } } class DemoPolimorfisme1 { public static void main(String[] args) { Penyanyi p;
} class PersegiPanjang extends Bentuk { private double panjang; PenyanyiJazz musmujiono = new PenyanyiJazz(); PenyanyiPop audi = new PenyanyiPop(); PenyanyiDangdut inul = new PenyanyiDangdut();
private double lebar; PersegiPanjang(int p, int l) { panjang = p; lebar = l;
}
class Lingkaran extends Bentuk {
public double luas() {
private double jarijari;
System.out.println("Dalam objek persegi
private final double PI = 3.1416;
panjang:"); Lingkaran(int r) { return (panjang * lebar);
jarijari = r;
}
}
} public double luas() { class BujurSangkar extends Bentuk { System.out.println("Dalam objek lingkaran:"); private double sisi; return (PI * jarijari * jarijari); BujurSangkar(int s) { } sisi = s; } } class DemoPolimorfisme2 { public double luas() { public static void main(String[] args) { System.out.println("Dalam objek bujursangkar:"); return (sisi * sisi);
Bentuk obj; PersegiPanjang pp = new PersegiPanjang(5, 3); BujurSangkar bs = new BujurSangkar(4);
} }
Segitiga st = new Segitiga(4, 3);
class Segitiga extends Bentuk {
Lingkaran lk = new Lingkaran(2);
private double alas;
// obj mengacu pada objek PersegiPanjang
private double tinggi;
obj = pp;
Segitiga(int a, int t) {
// akan memanggil method yang terdapat pada PersegiPanjang
alas = a; System.out.println("Luas : " + obj.luas()); tinggi = t; System.out.println(); } // obj mengacu pada objek PersegiPanjang public double luas() { System.out.println("Dalam objek segitiga:"); return ((alas * tinggi)/2); } }
obj = bs; // akan memanggil method yang terdapat pada BujurSangkar System.out.println("Luas : " + obj.luas()); System.out.println();
// obj mengacu pada objek PersegiPanjang
private int b;
obj = st;
// constructor kelas B
// akan memanggil method yang terdapat pada
B(int nilaiA, int nilaiB) {
Segitiga
//a = nilaiA; // SALAH, karena a tidak dikenali
System.out.println("Luas : " + obj.luas());
di sini
System.out.println();
setA(nilaiA); // menggunakan method setA()
// obj mengacu pada objek PersegiPanjang
b = nilaiB;
obj = lk;
}
// akan memanggil method yang terdapat pada
public void showData() {
Lingkaran // menggunakan method getA() System.out.println("Luas : " + obj.luas()); System.out.println("Nilai a : " + getA()); System.out.println();
System.out.println("Nilai b : " + b);
}
}
} } class C { //PROGRAM 7-3 private int c; class A { private int a;
public void setC(int nilai) { // hanya dikenali oleh
kelas A
//setA(10); di sini
// SALAH, setA() tidak dikenal
// hanya dapat dikenali oleh kelas A dan c = nilai;
turunan-turunannya }
protected void setA(int nilai) {
public int getC() {
a = nilai;
return c;
} }
// hanya dapat dikenali oleh kelas A dan turunan-turunannya
public void showC() {
protected int getA() {
//System.out.println("Nilai a : " + getA()); // SALAH
return a;
System.out.println("Nilai c : " + c);
} }
} class B extends A {
}
class DemoProtected1 {
KotakPejal(int p, int l, int t, int b) { panjang = p;
public static void main(String[] args) {
// menggunakan data
panjang // melakukan instansiasi terhadap kelas B lebar = l; B obj = new B(40, 50);
lebar
obj.showData();
tinggi = t; tinggi
obj.setA(100);
// menggunakan data
// menggunakan data
berat = b;
System.out.println("Nilai a : " + obj.getA()); }
}
public double getBerat() {
}
return berat;
//PROGRAM 7-4 }
class Kotak { protected double panjang; protected double lebar;
} class DemoProtected2 { public static void main(String[] args) {
protected double tinggi; //default constructor Kotak() {
// melakukan instansiasi terhadap kelas turunan KotakPejal k = new KotakPejal(4, 3, 2, 1);
panjang = lebar = tinggi = 0;
System.out.println("Volume k\t : " +
}
k.hitungVolume()); Kotak(int p, int l, int t) { System.out.println("Berat k\t : " + panjang = p;
k.getBerat());
lebar = l; tinggi = t;
} }
} public double hitungVolume() { return (panjang * lebar * tinggi); }
//PROGRAM 7-5 class Kotak { protected double panjang;
}
protected double lebar;
class KotakPejal extends Kotak {
protected double tinggi;
private double berat;
//default constructor
Kotak() {
System.out.println("Berat k : " + k.getBerat());
panjang = lebar = tinggi = 0; }
} }
Kotak(int p, int l, int t) { panjang = p;
//PROGRAM 7-6
lebar = l;
class Kotak {
tinggi = t;
protected double panjang;
}
protected double lebar;
public double hitungVolume() {
protected double tinggi;
return (panjang * lebar * tinggi);
Kotak() {
}
panjang = lebar = tinggi = 0;
}
}
class KotakPejal extends Kotak {
Kotak(Kotak k) {
private double berat;
this.panjang = k.panjang;
KotakPejal(int p, int l, int t, int b) {
this.lebar = k.lebar;
super(p, l, t); // memanggil constructor kelas Kotak
this.tinggi = k.tinggi; }
berat = b; Kotak(int p, int l, int t) { } panjang = p; public double getBerat() { lebar = l; return berat; tinggi = t; } } } public double hitungVolume() { class DemoSuper1 { return (panjang * lebar * tinggi); public static void main(String[] args) { } // melakukan instansiasi terhadap kelas turunan KotakPejal k = new KotakPejal(6, 5, 4, 2); System.out.println("Volume k : " + k.hitungVolume());
} class KotakPejal extends Kotak { private double berat; KotakPejal(KotakPejal kp) {
super(kp); // melewatkan objek ke dalam
}
super() this.berat = kp.berat; //PROGRAM 7-7 } class A { KotakPejal(int p, int l, int t, int b) { protected int a; super(p, l, t);
}
berat = b;
class B extends A { private int a;
}
// akan menimpa a
yang ada dalam kelas A
public double getBerat() { // constructor return berat; B(int nilai1, int nilai2) { }
super.a = nilai1;
}
// a di dalam
kelas A a = nilai2;
class DemoSuper2 {
// a di dalam
kelas B public static void main(String[] args) { } KotakPejal k1, k2, k3; k1 = new KotakPejal(4, 3, 2, 1); public void tampilkanNilai() { k2 = new KotakPejal(6, 5, 4, 2); System.out.println("Nilai a di dalam kelas A : " k3 = new KotakPejal(k1);
// melewatkan
objek k1 System.out.println("Volume k1\t : " +
+ super.a); System.out.println("Nilai a di dalam kelas B : " + a);
k1.hitungVolume()); } System.out.println("Berat k1\t : " + k1.getBerat());
}
System.out.println("\nVolume k2\t : " + k2.hitungVolume());
class DemoSuper3 { public static void main(String[] args) {
System.out.println("Berat k2\t : " + B obj = new B(121, 212);
k2.getBerat());
obj.tampilkanNilai();
System.out.println("\nVolume k3\t : " + k3.hitungVolume()); System.out.println("Berat k3\t : " + k3.getBerat()); }
} }
//PROGRAM 7-8
private int d;
class A {
public void setD(int nilai) {
private int a;
d = nilai;
public void setA(int nilai) {
}
a = nilai;
public int getD() {
}
return d;
public int getA() { return a; }
} } class DemoTurunanBertingkat {
}
public static void main(String[] args) {
class B extends A {
// membentuk objek dari kelas D
private int b;
D obj = new D();
public void setB(int nilai) {
// mengisi nilai
b = nilai;
obj.setA(10);
}
obj.setB(20);
public int getB() {
obj.setC(30);
return b;
obj.setD(40);
}
// menampilkan nilai
}
System.out.println("Nilai a : " + obj.getA());
class C extends B {
System.out.println("Nilai b : " + obj.getB());
private int c;
System.out.println("Nilai c : " + obj.getC());
public void setC(int nilai) {
System.out.println("Nilai d : " + obj.getD());
c = nilai; }
} }
public int getC() { return c; } } class D extends C {