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
{ }
.....
}
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)
4.အကယ်၍parentရဲ့method access modifierသည်protectedဖြစ်လျှင်child classတွင်ပြုပြင်လိုသောmethod access modifier သည်private မဖြစ်ရပါ။
5.new သိုမဟုတ် border checked exceptionများကိုthrow၍မရပါ။
အထက်တွင်ဖော်ပြထားသောစည်းမျဉ်းများတူညီလျှင်override methodများတွင်အောက်ပါကိစ္စရပ်များကွဲလွဲနိုင်သည်။
- အကယ်၍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()");
}
}
ရေးသားသူ
Thaw Htin Aung
Top comments (0)