Sunday, November 26, 2017

Kelas dan Objek Dalam Java 14: Pewarisan Multilevel


Konsep pewarisan multilevel ditunjukkan seperti gambar di bawah ini:


Ini berarti bahwa KelasB mewarisi KelasA dan KelasC yang mewarisi KelasBPewarisan multilevel, secara sederhana, dapat dilakukan oleh kode berikut:

=====================================================================

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package tugasPBO;

class Manusia{
 void makan(){System.out.println("sedang makan...");}
}

class Dewasa extends Manusia{
 void bohong(){System.out.println("suka berbohong...");}
}

class Bayi extends Dewasa{
 void nangis(){System.out.println("menangis...");}
}

public class PewarisanMultilevel {
 public static void main(String args[]){
  Bayi d = new Bayi();
  d.bohong();
  d.makan();
  d.nangis();
 }
}

KELUARAN PROGRAM:

suka berbohong...
sedang makan...
menangis...

========================================================================


Dari kode di atas dapat dilihat bahwa kelas Dewasa mewarisi kelas Manusia. Jadi, objek-objek dari kelas Dewasa dapat menggunakan metode maupun data dari kelas yang diwarisinya (kelas Manusia). Begitu pula, kelas Bayi mewarisi kelas DewasaJadi, objek-objek dari kelas Bayi dapat menggunakan metode maupun data dari kelas yang diwarisinya (kelas Manusia dan kelas Dewasa).



Pada kasus di atas, sebuah objek Bayi, yaitu d, dapat memanggil metode bohong() dari kelas supernya (kelas basisnya), dalam hal ini kelas Dewasa. Objek d juga dapat memanggil metode makan() dari kelas super paling atas, dalam hal ini kelas Manusia

=======================================================================

Untuk kasus yang lebih kompleks, berikut dituliskan kode untuk menerapkan konsep pewarisan multilevel. Pada kasus ini, kelas KelasVariansi mewarisi kelas KelasRerata, dan KelasRerata mewarisi KelasArray. Jadi, kelas KelasArray sebagai kelas super paling-atas atau kelas induk atau kelas basis dan kelas KelasRerata dan KelasVariansi sebagai kelas subkelas atau kelas terderivasi.

============================================================================

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package tugasPBO;
import java.util.*;

public class KelasArray {
 ArrayList<Double> arr = new ArrayList<Double>();
 int ukuran;
 
 // Ini adalah konstruktor tanpa argumen dari kelas KelasRerata
 public KelasArray() {
  this.ukuran = 10;
  arrayAcak(10,this.ukuran);
 }
 
 // Ini adalah konstruktor satu-argumen dari kelas KelasRerata
 public KelasArray(int ukuran) {
  arrayAcak(10,ukuran);
 }
 
 
 /* Ini adalah metode helper untuk membangkitkan
  * array acak yang dipakai untuk konstruktor
  */
 public void arrayAcak(int pengali, int ukuran) {
  ArrayList<Double> arrayKu = new ArrayList<Double>();

        for (int i=0; i<ukuran; i++)
        {
            Random rand = new Random();
            rand.setSeed(System.currentTimeMillis());
            Double r = rand.nextDouble()*1000;
            arrayKu.add(r);

        }
  
  this.arr = arrayKu;
 }
 
 public void inisialisasiArray() {
  // Metode untuk menginisialisasi array
  Scanner s=new Scanner(System.in);

   System.out.println("Masukkan banyak elemen array: ");
  int n=s.nextInt();
    
  // Menciptakan array dengan ukuran dinamis
  ArrayList<Double> arrayKu = new ArrayList<Double>();

   //Membaca array
  System.out.println("Masukkan elemen-elemen array: ");
  int i=0; double temp = 0.0;

   while(i<n){ 
   temp =s.nextDouble();
   arrayKu.add(temp);
   i++;
  }
  
  this.arr = arrayKu;
 }
    
 //Metode untuk menampilkan array
 public void tampilkanArray(ArrayList<Double> arrayKu) {
  System.out.println("Elemen-elemen array: ");
  System.out.println(arrayKu);
 }
}

========================================================================


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package tugasPBO;
import java.util.*;

public class KelasRerata extends KelasArray {
 double rerata;
 
 // Ini adalah konstruktor tanpa argumen dari kelas KelasRerata
 public KelasRerata() {
  this.rerata = 0.0;
 }
 
    //Metode untuk menghitung rerata
 //Menghitung dan menampilkan rerata array
 public void hitungRerata(ArrayList<Double> arrayKu) {
  //Menghitung rerata array dinamis dengan memanfaatkan iterator
  double jum = 0.0; double rerata = 0.0;
  Iterator<Double> itr = arrayKu.iterator();
    
  while(itr.hasNext()){
   jum += itr.next();
  }
  rerata = jum/arrayKu.size();
  this.rerata = rerata;
 }

}

=====================================================================


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package tugasPBO;
import java.util.*;

public class KelasVariansi extends KelasRerata {
 double variansi;
 
 // Ini adalah konstruktor tanpa argumen dari kelas KelasVariansi
 public KelasVariansi() {
  this.variansi = 0.0;
 }
    
    // Metode untuk menghitung dan menampilkan variansi array
 public void hitungVariansi(ArrayList<Double> arrayKu, double rerata) {
  // Menghitung dan menampilkan variansi array dengan memanfaatkan iterator
  double variansi = 0.0; double var = 0.0; double temp2 = 0.0;
  Iterator<Double> itr2 = arrayKu.iterator();
    
  while(itr2.hasNext()){ 
   temp2 = itr2.next();
   var += (temp2-rerata)*(temp2-rerata);
  }
  variansi = var / arrayKu.size();
  this.variansi = variansi;
 }
    
}
========================================================================



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package tugasPBO;

public class PewarisanMultilevelArray {
 public static void main(String args[]){ 
  //Menciptakan sebuah objek superkelas (KelasArray)
  //Ini juga berarti memanggil konstruktor default
  //tanpa-argumen dari superkelas
  KelasArray objekSuper = new KelasArray();
  
  //Objek superkelas dipakai untuk memanggil metode dari superkelas (KelasArray)
  System.out.println("Nilai-nilai data pada objek objekSuper (superkelas): ");
  objekSuper.tampilkanArray(objekSuper.arr);
  
  //Menciptakan sebuah objek superkelas (KelasArray) lain
  //Ini juga berarti memanggil konstruktor
  //satu-argumen dari superkelas
  KelasArray objekSuper2 = new KelasArray(15);
  
  //Objek superkelas objekSuper2 dipakai memanggil metode dari superkelas (KelasArray)
  System.out.println("\n");
  System.out.println("Nilai-nilai data pada objek objekSuper2 (superkelas): ");
  objekSuper2.tampilkanArray(objekSuper2.arr);
  
  
  
  //========KONSEP PEWARISAN MULTILEVEL DI SINI===================
  //Menciptakan objek dari subkelas KelasVariansi
  //Ini berarti memanggil konstruktor default dari
  //superkelas KelasRerata dan konstruktor default dari 
  //superkelas atas KelasArray
  System.out.println("\n");
  System.out.println("Nilai-nilai data pada objek1 (subkelas): ");
  KelasVariansi objek1 = new KelasVariansi();
  System.out.println("Array pada objek1 adalah: "+objek1.arr);
    
  
  /* Objek subkelas dipakai untuk memanggil metode superkelas
   * untuk menghitung rerata menggunakan pewarisan
   */
  System.out.println("\n");
  objek1.hitungRerata(objek1.arr);
  System.out.println("Rerata pada objek1 adalah: "+objek1.rerata);
  
  //Objek subkelas objek1 dipakai untuk memanggil metode dari 
  //superkelas paling-atas (KelasArray) yaitu metode inisialisasiArray()
  //dan metode tampilkanArray()
  System.out.println("\n");
  System.out.println("Nilai-nilai data pada objek objek1 (subkelas ]): ");
  objek1.inisialisasiArray();
  objek1.tampilkanArray(objek1.arr);
  //================================================================
 }
}
=======================================================================

KELUARAN PROGRAM:

Nilai-nilai data pada objek objekSuper (superkelas): 
Elemen-elemen array: 
[384.8632734932486, 384.8632734932486, 384.8632734932486, 384.8632734932486, 384.8632734932486, 384.8632734932486, 384.8632734932486, 384.8632734932486, 384.8632734932486, 384.8632734932486]


Nilai-nilai data pada objek objekSuper2 (superkelas): 
Elemen-elemen array: 
[384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867, 384.50494640442867]


Nilai-nilai data pada objek1 (subkelas): 
Array pada objek1 adalah: [383.96747067236004, 383.96747067236004, 383.96747067236004, 383.96747067236004, 383.96747067236004, 383.96747067236004, 383.96747067236004, 383.96747067236004, 383.96747067236004, 383.96747067236004]


Rerata pada objek1 adalah: 383.96747067236


Nilai-nilai data pada objek objek1 (subkelas ]): 
Masukkan banyak elemen array: 
5
Masukkan elemen-elemen array: 
1.1
2.2
3.3
4.4
5.5
Elemen-elemen array: 
[1.1, 2.2, 3.3, 4.4, 5.5]


============================================================================





No comments: