Bahasa C
Kata polimorfisme berarti memiliki banyak bentuk. Dalam paradigma pemrograman berorientasi objek, polimorfisme sering dinyatakan sebagai 'satu antarmuka, banyak fungsi'.
Polimorfisme bisa statis atau dinamis. Dalam polimorfisme statis , respons terhadap suatu fungsi ditentukan pada waktu kompilasi. Dalam polimorfisme dinamis , diputuskan pada saat run-time.
Mekanisme menghubungkan fungsi dengan objek selama waktu kompilasi disebut pengikatan awal. Ini juga disebut pengikatan statis. C# menyediakan dua teknik untuk mengimplementasikan polimorfisme statis. Mereka adalah
Kami membahas kelebihan operator di bab berikutnya.
Anda dapat memiliki beberapa definisi untuk nama fungsi yang sama dalam lingkup yang sama. Definisi fungsi harus berbeda satu sama lain berdasarkan jenis dan/atau jumlah argumen dalam daftar argumen. Anda tidak dapat membebani deklarasi fungsi yang hanya berbeda berdasarkan tipe pengembalian.
Contoh berikut menunjukkan menggunakan fungsi print() untuk mencetak tipe data yang berbeda
Demo Langsungusing System; namespace PolymorphismApplication { class Printdata { void print(int i) { Console.WriteLine("Printing int: {0}", i ); } void print(double f) { Console.WriteLine("Printing float: {0}" , f); } void print(string s) { Console.WriteLine("Printing string: {0}", s); } static void Main(string[] args) { Printdata p = new Printdata(); // Call print to print integer p.print(5); // Call print to print float p.print(500.263); // Call print to print string p.print("Hello C++"); Console.ReadKey(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
Printing int: 5 Printing float: 500.263 Printing string: Hello C++
C# memungkinkan Anda untuk membuat kelas abstrak yang digunakan untuk menyediakan implementasi kelas parsial dari sebuah antarmuka. Implementasi selesai ketika kelas turunan mewarisi darinya. Abstrak kelas berisi metode abstrak, yang diimplementasikan oleh kelas turunan. Kelas turunan memiliki fungsionalitas yang lebih khusus.
Berikut adalah aturan tentang kelas abstrak
Anda tidak dapat membuat turunan dari kelas abstrak
Anda tidak dapat mendeklarasikan metode abstrak di luar kelas abstrak
Ketika sebuah kelas dideklarasikan disegel , tidak dapat diwariskan, kelas abstrak tidak dapat dinyatakan disegel.
Program berikut mendemonstrasikan kelas abstrak
Demo Langsungusing System; namespace PolymorphismApplication { abstract class Shape { public abstract int area(); } class Rectangle: Shape { private int length; private int width; public Rectangle( int a = 0, int b = 0) { length = a; width = b; } public override int area () { Console.WriteLine("Rectangle class area :"); return (width * length); } } class RectangleTester { static void Main(string[] args) { Rectangle r = new Rectangle(10, 7); double a = r.area(); Console.WriteLine("Area: {0}",a); Console.ReadKey(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
Rectangle class area : Area: 70
Ketika Anda memiliki fungsi yang didefinisikan di kelas yang ingin Anda implementasikan di kelas yang diwarisi, Anda menggunakan virtual fungsi. Fungsi virtual dapat diimplementasikan secara berbeda di kelas warisan yang berbeda dan panggilan ke fungsi ini akan diputuskan saat runtime.
Polimorfisme dinamis diimplementasikan oleh kelas abstrak dan fungsi virtual .
Program berikut menunjukkan ini
Demo Langsungusing System; namespace PolymorphismApplication { class Shape { protected int width, height; public Shape( int a = 0, int b = 0) { width = a; height = b; } public virtual int area() { Console.WriteLine("Parent class area :"); return 0; } } class Rectangle: Shape { public Rectangle( int a = 0, int b = 0): base(a, b) { } public override int area () { Console.WriteLine("Rectangle class area :"); return (width * height); } } class Triangle: Shape { public Triangle(int a = 0, int b = 0): base(a, b) { } public override int area() { Console.WriteLine("Triangle class area :"); return (width * height / 2); } } class Caller { public void CallArea(Shape sh) { int a; a = sh.area(); Console.WriteLine("Area: {0}", a); } } class Tester { static void Main(string[] args) { Caller c = new Caller(); Rectangle r = new Rectangle(10, 7); Triangle t = new Triangle(10, 5); c.CallArea(r); c.CallArea(t); Console.ReadKey(); } } }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
Rectangle class area: Area: 70 Triangle class area: Area: 25
Bahasa C
Kelas Java ObjectInputStream Dalam tutorial ini, kita akan belajar tentang Java ObjectOutputStream dan metodenya dengan bantuan contoh. ObjectInputStream kelas java.io package dapat digunakan untuk membaca objek yang sebelumnya ditulis oleh ObjectOutputStream . Ini memperluas InputStream kelas abs
Kelas Java PrintStream Dalam tutorial ini, kita akan belajar tentang kelas Java PrintStream dan metode print() dan printf() dengan bantuan contoh. PrintStream kelas java.io package dapat digunakan untuk menulis data keluaran dalam bentuk (teks) yang dapat dibaca secara umum alih-alih byte. Ini mem
Kelas Pembaca Java Dalam tutorial ini, kita akan belajar tentang Java Reader, subclass-nya dan metodenya dengan bantuan sebuah contoh. Reader kelas java.io package adalah superclass abstrak yang mewakili aliran karakter. Sejak Reader adalah kelas abstrak, itu tidak berguna dengan sendirinya. Namun
Apa itu Warisan dalam C#? Warisan adalah konsep penting dari C#. Warisan adalah konsep di mana Anda mendefinisikan kelas induk dan kelas anak. Kelas anak mewarisi metode dan properti dari kelas induk, tetapi pada saat yang sama, mereka juga dapat mengubah perilaku metode jika diperlukan. Kelas anak