DEV Community

UCSYSG
UCSYSG

Posted on

Polymorphism

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 ဥပမာ

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
{ }
.....
}
Enter fullscreen mode Exit fullscreen mode

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ကိုကြည့်ပါ)

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)       
Enter fullscreen mode Exit fullscreen mode

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 ဥပမာ

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()");
    }
}

Enter fullscreen mode Exit fullscreen mode

ရေးသားသူ
Thaw Htin Aung

Top comments (0)