Pewarisan Jamak
Oleh : Agus Priyanto, M.Kom
Tujuan Perkuliahan
Setelah mempelajari materi ini, diharapkan
mahasiswa mampu:
Mengerti tentang pewarisan jamak dan
Interface serta implementasinya dalam
bahasa C++ dan Java
Outline Kuliah
Pewarisan atau Inheritance
Implementasi dan problem
pewarisan jamak dalam C++
Implementasi dalam Java
Pendahuluan
Pewarisan awalnya dipandang sebagai
mekanisme untuk sharing kode (fungsi) dan
data (atribut)
Pewarisan Jamak (multiple inheritance)
dipandang sebagai mekanisme untuk
membentuk suatu sub kelas dari beberapa
implementasi super kelas
Implementasi dalam C++
Sintaks :
class Turunan : public Dasar1, Public Dasar2{
// deklarasi badan kelas
}
Implementasi dalam C++
#include<iostream>
class base1
{
protected:
int iVar1; // To make it available
// to the derived class
public:
void show_1()
{
cout << iVar1 << endl;
}
};
#include<iostream>
class base2
{
protected:
int iVar2; // To make it available
// to the derived class
public:
void show_2()
{
cout << iVar2 << endl;
}
};
class derived : public base1,public base2
{
public:
void set(int iTx, int iTy)
{
iVar1=iTx;iVar2=iTy;
}
};
int main()
{
derived Dvar;Dvar.set(10,20);
Dvar.show_1();Dvar.show_2();
return 0;
}
Implementasi dalam C++
Problem Ambiguitas :
1. Timbul ketika 2 kelas induk memiliki suatu fungsi
dengan nama yang sama
2. Kelas turunan memiliki beberapa salinan kelas dasar
yang sama
Implementasi dalam C++ (Ambiguitas)
Problem 1 : Dua kelas induk memiliki suatu fungsi
dengan nama yang sama.
#include<iostream>
class base1
{
protected:
int iVar1; // To make it available
// to the derived class
public:
void show()
{
cout << iVar1 << endl;
}
};
#include<iostream>
class base2
{
protected:
int iVar2; // To make it available
// to the derived class
public:
void show()
{
cout << iVar2 << endl;
}
};
class derived : public base1,public base2
{
// empty class
};
int main()
{
derived Dvar;
Dvar.show();
return 0;
}
Dari Base1 atau Base2 ??
Implementasi dalam C++
Menggunakan scope resolution
operator (::)
Solusi
Melakukan overriding method di
kelas anak
Implementasi dalam C++
Solusi (file ambiguitas_1.cpp)
• Menggunakan scope resolution operator (::)
class derived : public base1,public base2
{
// empty class
};
int main()
{
derived Dvar;
Dvar.base1::show();
Dvar.base2::show();
return 0;
}
Implementasi dalam C++
Solusi (file ambiguitas_2.cpp)
Melakukan overriding method di kelas anak
class derived : public base1,public base2
{
public:
void disp() {
base1::show();
base2::show();
}
};
int main() {
derived Dvar;
Dvar::disp();
return 0;
}
Implementasi dalam C++ (Ambiguitas)
Problem 2 : Kelas turunan memiliki beberapa
salinan kelas dasar yang sama.
Class A
Class B
Class C
Class D
Implementasi dalam C++ (Ambiguitas)
Problem 2 : Kelas turunan memiliki beberapa
salinan kelas dasar yang sama.
#include<iostream>
class A
{
protected:
int AVar;
};
class B : public A
{
protected:
int BVar;
};
class C : public A
{
protected:
int CVar;
};
class D : public B, public C
{
protected:
int DVar;
};
int main() {
D Dtemp;
Dtemp.Avar=10;
return 0;
}
ambiguitas
D mendapatkan
Avar dari B dan C
Implementasi dalam C++ (Ambiguitas)
Menggunakan scope resolution
operator (::)
Solusi
Menggunakan virtual base class
Implementasi dalam C++ (Ambiguitas)
SOLUSI Menggunakan scope resolution operator (::) (file
ambiguitas_3.cpp)
#include<iostream>
class A
{
protected:
int AVar;
};
class B : public A
{
protected:
int BVar;
};
class C : public A
{
protected:
int CVar;
};
int main() {
D Dtemp;
Dtemp.display();
return 0;
}
class D : public B, public C
{
protected:
int DVar;
};
public:
void display() {
B::AVar=20; C::AVar=30
cout << B::Avar << C::AVar;
}
}
Implementasi dalam C++
(Ambiguitas)
SOLUSI Menggunakan virtual base class (file
ambiguitas_4.cpp)
#include<iostream>
class A
{
protected:
int AVar;
};
}
class B : virtual public A
{
protected:
int BVar;
};
}
class C : virtual public A
int main() {
{
D Dtemp;
protected:
Dtemp.display();
int CVar;
return 0;
};
}
}
class D : public B, public C
{
protected:
int DVar;
};
public :
void display() {
Avar = 10;
cout << Avar << endl
}
}
Implementasi dalam Java
Java TIDAK mendukung pewarisan Jamak
Java HANYA memiliki pewarisan tunggal Suatu
kelas turunan hanya memiliki satu kelas induk
Lalu Bagaimana perwujudannya dalam Java ?
Java mewujudkannya dengan menggunakan Interface
Multiple interface inheritance BUKAN multiple
implementation inheritance
Interface
Interface kumpulan
deklarasi fungsi (tanpa
implementasi). Interface
juga dapat
mendeklarasikan
konstanta.
interfaceDeclaration {
interfaceBody
}
Interface
Interface mendefinisikan suatu protokol
perilaku
Suatu kelas mengimplementasi suatu interface
Kelas tersebut akan melekat pada perilaku
yang didefinisikan interface
Interface
Implementasi :
Kelas implements interface {
// isi kelas
}
Pewarisan Jamak dalam Java
Menggunakan Interface
Kombinasi antara turunan satu kelas dengan
interface atau menggunakan interface sebagai
kelas-kelas Induk.
Bagaimana mewujudkan dalam Java ?
Parent
Other
ParentChild
Kombinasi antara turunan satu kelas dengan
interface
Parent
Parent Child
<<Interfac e> >
OtherInterface
Other
OtherChild
Implementasi dalam Java
class Parent
{
private int val;
public Parent(int value ) {
this.val = value;
}
public int getValue() {
return this.val;
}
// some code omitted
}
class Other
{
private int val;
public Other(int value) {
this.val = val;
}
public void whatever()
{
System.out.println("whatever methods \n");
}
}
interface OtherInterface
{
void whatever();
}
class OtherChild extends Other implements OtherInterface
{
public OtherChild (int value){
super(value);
}
// others ..
}
class ParentChild extends Parent implements OtherInterface
{
public ParentChild(int val) {
super(val);
child = new OtherChild(val);
}
public void whatever() {
child.whatever();
}
private OtherInterface child;
}