C# Tidak Mendukung Multiple Inheritance
C# tidak mendukung mutiple inheritance karena akan menimbulkan ambiguitas. Contoh kasus ambiguitas yang bisa timbul dari multiple inheritance misalnya, ada class A, B dan C. Class A dan B memiliki method yang nama dan parameternya persis sama, misal namanya MethodSample(). Class C kemudian mewarisi class A dan B, maka di dalam class C akan ada 2 MethodSample(string args). Ketika MethodSample() dipanggil melalui class C, kompiler akan bingung apakah akan memanggil method yang diwarisi dari A atau dari B. Karena alasan tersebut C# tidak mendukung multiple inheritance. Berikut adalah contoh implementasi multiple inheritance di C# jika C# mendukung fitur tersebut(Anggap saja C# mendukung fitur multiple inheritance).
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 | class Manusia { public void Berlari() { Console.WriteLine("Lari..."); } } class Alien { public void Terbang() { Console.WriteLine("Terbang..."); } } class ManusiaSuper : Manusia, Alien { //class ini otomatis memiliki method-method yang ada di class //Manusia dan Alien walaupun pada editor source code tidak terlihat } class Program { static void Main(string[] args) { ManusiaSuper manusiaSuper = new ManusiaSuper() manusiaSuper.Berlari(); manusiaSuper.Terbang(); Console.ReadKey(); } } |
Alternatif Multiple Inheritance Menggunakan Interface
C# memang tidak mendukung multiple inheritance tapi ada alternatif untuk melakukan itu di C#, yaitu menggunakan interface. Method-method di dalam interface semuanya abstrak, class turunannya yang harus mengimplementasikan method-method tersebut. Sebuah class yang mengimplementasikan interface akan mewarisi tipe(class dan interface bisa dianggap sebagai tipe). Class tersebut juga “dipaksa” untuk melakukan implementasi method sesuai yang didefinisikan di interface tersebut. Sebuah class bisa mengimplementasikan interface lebih dari satu. Berikut contoh alternatif implementasi multiple iheritance di C# menggunakan interface.
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 | interface IManusia { void Berlari(); } interface IAlien { void Terbang(); } class Manusia : IManusia { public void Berlari() { Console.WriteLine("Lari..."); } } class Alien : IAlien { public void Terbang() { Console.WriteLine("Terbang..."); } } class ManusiaSuper : IManusia, IAlien { readonly Manusia manusia = new Manusia(); readonly Alien alien = new Alien(); public void Berlari() { manusia.Berlari(); } public void Terbang() { alien.Terbang(); } } |
Pada contoh kode diatas, class ManusiaSuper melakukan implementasi dua interface, yaitu IManusia dan IAlien. Berikut adalah contoh kode untuk memanggil method-method yang ada di class ManusiaSuper.
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 | class Program { static void Main(string[] args) { Manusia manusia = new Manusia(); Alien alien = new Alien(); ManusiaSuper manusiaSuper = new ManusiaSuper(); Program.CallManusia(manusia); Program.CallAlien(alien); //Object manusiaSuper bisa dikenali sebagai manusia dan alien Program.CallManusia(manusiaSuper); Program.CallAlien(manusiaSuper); Console.ReadKey(); } static void CallManusia(IManusia manusia) { manusia.Berlari(); } static void CallAlien(IAlien alien) { alien.Terbang(); } } |
Class program memiliki dua method, pertama CallManusia() dengan tipe argumen IManusia dan CallAlien() dengan tipe argumen IAlien. Di method Main(), method CallManusia() harus dipanggil dengan menyertakan parameter berupa object bertipe IManusia. Method CallAlien() harus dipanggil dengan menyertakan parameter berupa object bertipe IAlien. Perhatikan pada saat pemanggilan method CallManusia() dan CallAlien dengan parameter object bertipe ManusiaSuper. Dengan mengimplementasikan IManusia dan IAlien, object manusiaSuper bisa dikenali sebagai object Manusia maupun object Alien. Object yang mengimplementasikan interface bisa dikenali di seluruh bagian kode program yang memiliki pengidentifikasi berupa interface yang diimplementasikan class tersebut.
Contoh implementasi alternatif multiple inheritance di C# yang lainnya, bisa kalian lihat di tulisan saya yang membahas tentang Dependency Injection. Tulisan tersebut menjelaskan bagaimana teknik dependency injection dilakukan dengan menggunakan interface.
Terima kasih. Semoga bermanfaat.
[…] inheritance) dengan pendekatan menggunakan interface. Silahkan baca tulisan saya tentang multiple inheritance agar lebih […]