Overloading
එකම method name යොදාගනිමින් විවිඩ ආකර වලට method signature යොදමින් method කිහිපයක් නිර්මාණය කිරීම method Overloading යැයි කියනු ලැබේ. මෙය compile time (or static) polymorphism වලට අයත් වේ.
- public int sum(int a, int b){
- return a+b;
- }
- public double sum(double a, double b){
- return a+b;
- }
- public long sum(long a, long b){
- return a+b;
- }
- public float sum(float a, float b){
- return a+b;
- }
- public int sum(int a, int b, int c){
- return a+b+c;
- }
- public static void main(String args[]){
- System.out.println("Sum of 1 and 2 is "+sum(1,2));
- System.out.println("Sum of 2147483649L and 4147400049L is "+sum(2147483649L,4147400049L));
- System.out.println("Sum of 6.9 and 2.8 is "+sum(6.9,2.8));
- System.out.println("Sum of 1 and 2 is "+sum(1,2,3));
}
Call කරන method එකේ parameter වල ගැලපීම අනුව අදාළ method එක run කරයි.
line 17 දී run කරන්නේ line 1 දී අර්ථ ගැන්වූ sum method එකයි මන්ද parameter ගණනයි එහි data type එකයි එක සමානයි. ඒ අනුව ඒ ඒ අදාළ method call අදාළ method එක parameter වල ස්වභාවය අනුව තීරණය කරයි.
මෙහි ඇති ප්රධාන වාසිය නම් method name මතක තබා ගැනීමේ පහසුවයි. මන්ද එකම කාර්යක් කරන method කිහිපයකට method name වෙනස් නම් ලබා දීලා මතක තබා ගන්නවට වඩා එක method name එකක් මතක තබා ගැනීම ලේසි බැවිනී.
Overriding
සරලව කිව්වොත් Overriding යනු super(base or parent) class එකක method එකක් sub(derived or child) class එකක් තුළ අර්ථ දක්වා ගැනීම ගැනීමයි. super class එකේ ඇති එවැනි method එකක්, overridden method ලෙස හදුන්වයි. sub class එකක අර්ථ ගැන්වු එම method එක Overriding method ලෙස හදුන්වයි. එහි overriding method එකේ method signature එක overridden method එකට සමාන විය යුතුයි.
නමුත් super(base or parent) class එකක method එකක් sub(derived or child) class එකක් තුළ අර්ථ නොදක්වනවා නම් එවැනි method එකක්, inherited method ලෙස හදුන්වයි.
Overriding වල නීති
- මේවා inheritance වල පමණක් ම තිබෙන නිසා Access modifier එක protected හා public තිබිය හැක. එකම package එක තුළ නම් default වුනත් යෙදිය හැක. නමුත් private යෙදුවත් වරදක් නැති නමුත් Overriding එකක් සිදුනොවේ. ඒවා ඒ ඒ class එකට අදාළ method බවට පත්වේ.
- Final methods ආදිය Overriding කළ නොහැක. මෙහි අදහස නම් Final කියන keyword එක overridden method වලට නොදැමිය යුතු බවයි. එසේ කළහොත් දෝෂ ඇතිවිය හැක.
- Static keyword එකක් methods වලට යෙදීමෙන් Overriding වීමක් සිදු නොවේ. එහිදී සිදුවන්නේ private keyword වලදි මෙන් methods එක සැගවීමක් පමණක් සිදුවේ. Overriding එකක් වන්න නම් දෙකම non static method විය යුතුයි. overridden method හෝ overriding method දෙකෙන් එකක් non static වෙලා අනෙක static වෙන්න බැහැ. static method එකක් static යොදමින් overloading කළ හැක.
- overriding method වලට overridden method එකට සමාන return type එකක් තිබිය යුතුයි. මෙම return type එක Covariant return types එක ලෙස හදුන්වයි.
- overriding method එක තුළම හිද overridden method එක call කළ හැක. මෙහිදි super keyword භාවිතයෙන් base class(parent or super) එකේ overridden method එකට call කරනු ලබයි.
- Exception Handling වලදී නීති දෙකක් පවති. පළමු නීතීය වන්නේ parent class එකේ overridden method එකේ throws Exception නැතිනම් overriding method එකේ throws Exception දැක්විය නොහැකියි. එසේ දැමිය හැක්කේ Exception වල ඇති sub Exception (RuntimeException , ArithmaticException , ..) වලට පමණි. අනෙක් නීතීය නම් parent class එකේ overridden method එකේ යම් Exception එකක් ඇති නම් overriding method එකෙන් throws කළ හැක්කේ parent class එකේ Exception එකට සමාන හෝ sub Exception වන Exception එකක් පමණී. overriding method එකේ super Exception තිබිය නොහැක.
- abstract method අඩංගු abstract class එකක් derived concrete class එකකින් override කරගත යුතුයි.
- synchronized/strictfp ඇති method වලට overriding නීතිවල බලපෑමක් නැත.
No comments:
Post a Comment