Polymorphism
Published: 2021-07-26 10:05:25


polymorphismဆိုတာကတော့OOPရဲ့featuresတွေထဲကတစ်ခုဖြစ်ပါတယ်။polymorphismဆိုတာကတော့Greekဘာသာစကားpoly(many)နဲ့morph(form)ကနေဆင်းသက်လာခြင်းဖြစ်ပါတယ်။ဆိလိုချင်တာကတော့လုပ်ဆောင်ချက်တစ်ခုထဲကိုပဲပုံစံအမျိုးမျိုးနဲ့ဖော်ပြနိုင်ခြင်းဖြစ်ပါတယ်။

Polymorphismကိုအသုံးပြုခြင်း
==

Classတခုဟာတခြားclassတခုကိုအမွေဆက်ခံလိုက်ပြီဆိုတာနဲ့polymorphismရဲ့သဘောတရားဟာအသက်ဝင်လာပြီဖြစ်ပါတယ်။Polymorphismကိုprogramming concept  အနေနဲ့ပြောရမယ်ဆိုရင်Objectတခုခြင်းပေါ်မူတည်ပြီးတော့Methodရဲ့လုပ်ဆောင်နိုင်စွမ်းကွဲပြားသွားတာဖြစ်ပါတယ်။ထိုကဲ့သိုကွဲပြားရာကိုမူတည်ပြီးတော့ကျွန်တော်တိုconceptနှစ်မျိုးခွဲခြားနိုင်ပါတယ်။ထိုအရာတွေကတော့-

1.Method Overloading(compile time or static polymorphism )

2.Method Overriding (run time or dynamic polymorphism )တိုပဲဖြစ်ပါတယ်။


Method Overloading
==

Method Overloadingဆိုတာကတော့Class တစ်ခုထဲမှာmethod nameတွေတူပေမယ့်parameterတွေမတူတာကိုဆိုလိုခြင်းဖြစ်ပါတယ်။method return typeလဲကွဲပြားမှုရှိနိုင်ပါတယ်။

Method Overloading လုပ်လျှင်လိုက်နာရမည့်စည်းမျဉ်းများ
==
 methodနှစ်ခုကိုoverloadအဖြစ်သတ်မှတ်ချင်လျှင်အထက်ပါအချက်နှစ်ချက်တူညီရမည်-
 
1.methodနှစ်ခုလုံးmethod name တူရမည်။

2.methodနှစ်ခုလုံးparameter listကွဲပြားရမည်။

ထိုနှစ်ချက်သာမရှိမဖြစ်လိုအပ်သည်။အောက်တွင်ဖော်ပြထားသောအကြောင်းအရာများလဲကွဲပြားမှုရှိနိုင်သည်။

1.return typeများကွဲပြားနိုင်သည်။

2.access modifier များကွဲပြားနိုင်သည်။

3.exceptionများကိုthrowsလုပ်ရာတွင်လဲကွဲပြားနိုင်သည်။

Method overloading ဥပမာ
==
```java
class Example{
.....
public void method(int a)
{return;}

private void method(int a,int b)
{return;}

int method(int a,int b,int c)
{ return a+b+c;}

private void method(Object object)throws Exception
{ }
.....
}
```

Method Overriding
==

MethodOverridingဆိုတာကတော့Parent classကနေလက်ခံရရှိတဲ့methodကိုမိမိကိုယ်ပိုင်ပုံစံဖြင့်ပြုပြင်ရေးသားခြင်းပဲဖြစ်ပါတယ်။

Method overriding လုပ်လျှင်လိုက်နာရမည့်စည်းမျဉ်းများ
==

အောက်ပါဖော်ပြထားသောစည်းမျဉ်းများကိုမဖြစ်မနေလိုက်နာရမည်။

1.method name တူရမည်။

2.argument listတူရမည်။

3.return typeတူညီရမည်။(JDK5မှစတင်၍convariant return typeများsupportလုပ်လာသည်။အရှင်းလင်းဆုံးပြောရလျှင်different return typeများဖြစ်သည်။different return typeဟုဆိုသော်လဲပဲထို return typeသည်parentရဲ့sub typeသာဖြစ်ရမည်။ပို၍ရှင်းလင်းစေရန်အောက်တွင်ဖော်ပြထားသောcodeကိုကြည့်ပါ)

```java
class A{    
A get(){return this;}    
}    
    
class B extends A{    
@Override  
B get(){return this;}//convariant type (B is Sub type of it's parent A)       
```

4.အကယ်၍parentရဲ့method access modifierသည်protectedဖြစ်လျှင်child classတွင်ပြုပြင်လိုသောmethod access modifier သည်private မဖြစ်ရပါ။

5.new သိုမဟုတ် border checked exceptionများကိုthrow၍မရပါ။

အထက်တွင်ဖော်ပြထားသောစည်းမျဉ်းများတူညီလျှင်override methodများတွင်အောက်ပါကိစ္စရပ်များကွဲလွဲနိုင်သည်။

1. အကယ်၍parentရဲ့method access modifierသည်protectedဖြစ်လျှင်child classတွင်ပြုပြင်လိုသောmethod access modifier သည်publicဖြစ်လိုရပါသည်။

2.fewer, narrower checked exeeptions(သို) unchecked exceptionများthrowနိုင်သည်။(ထိုအကြောင်းအရာများကိုException handlingအပိုင်းတွင်အသေးစိတ်ဖော်ပြသွားပါမည်။)

Appendix Rules for Overriding
==

1.Inheritance methodများသာoverrideပြုလုပ်နိုင်သည်။ဆိုလိုတာကတော့child classတွင်သာover ride လုပ်နိုင်သည်။

2.Constructorsနှင့်private methodများကိုinheritedလုပ်၍မရသောကြောင့်oveerideမလုပ်နိုင်ပါ။

3..Abstract methodများကိုလက်ခံသောconcrete class များသည်overrideမဖြစ်မနေလုပ်ရမည်။

4.final methodတွေကိုoverrideလုပ်၍မရပါ။

5.subclassများတွင်parentရဲ့methodများအသုံးပြုလိုပါကsuper.method()ဆိုပြီးအသုံးပြုနိုင်သည်။

အထက်ပါဖော်ပြချက်များကတော့overidingနှင့်overloadingအကြောင်းဖြစ်ပါသည်။ဖတ်ရှုပေးတဲ့အတွက်ကျေးဇူးအထူးတင်ရှိပါသည်။

Method overloading ဥပမာ
==
```java
class A {
    void show()
    {
        System.out.println("Parent's show()");
    }
}
  
// Inherited class
class B extends A {
    @Override//method overiding
    void show()
    {
        System.out.println("Child's show()");
    }
}
  
```

ရေးသားသူ
Thaw Htin Aung