Object Oriented Language විදියට අපි JAVA භාවිතා කරන විට Inheritance කියන්නේ වැදගත් දෙයක්.එතනදී method එකක් නියමාකාරයෙන් override කරන විදියත් ඒ overrided method එකට call කරද්දී වෙන දේත් නිවැරදිව දැන සිටීමත් වැදගත්.සරලවම කිව්වොත් method overrding එකක් අපිට අවශ්ය වෙන්නේ parent class එකේ තියෙන method එකක වෙන දේ යම්කිසි වෙනස් ආකාරයකින් child class එකක කරගැනීමයි.මම කතා කරන්න යන්නේ method name and return types එකම වෙන්න ඕන යනාදී කරුණු ගැන නොව ඒ method එකට call කරද්දී සැලකිලි විය යුතු දෙයක් ගැනයි.
public class A{
public void m(){
System.out.println("A");
}
}
class B extends A{
public void m(){
System.out.println("B");
}
public static void main(String args[]){
A x1 = new A();
B x2 = new B();
A x3 = new B();
x1.m();// 1
x2.m();// 2
x3.m();// 3
}
}
ඉහත දැක්වෙන්නේ method overriding ගැන සරල උදාහරණයක්.මෙහිදී අපට ලැබෙන output එක තමයි පිලිවෙලින් A,B සහ B.1 සහ 2 අවස්ථා නම් ඉතා පැහැදිලිය.නමුත් 3 අවස්ථාවේ Parent class reference එකකින් Child class object එකක් refer කරගෙන ඉන්න අවස්ථාවක්.එහෙම refer කරන එක සම්බන්ධයෙන් නම් කිසිම ගැටළුවක් නෑ.ඒත් output එක B දෙන්නේ ඇයි?
මෙහිදි වන්නේ compile time එකේදි m() කියන method එක parent class එක තුල තිබෙනවාදැයි මුලින්ම බලනවා.ඒ කියන්නෙ compile time එකේදී බලන්නේ reference type class එක තුල m() කියන method එක තියනවාද බලන එකයි.ඉන්පසු runtime එකේදී බලන්නේ object type class එක තුල ඒ method එක තියෙනවාද බලලා ඒක run කරන එකයි.මෙතනදී 3 අවස්ථාවේ object type class එක වෙන්නේ B. එහෙමත් නැතිනම් sub class එක.
පහත දැක්වෙන උදාහරණයේ method overriding එකක් නැති වුනත් ඉහත සිද්ධාන්තයට අනුව අපිට දෙන්නේ compilation error එකක්.
public class A{
}
class B extends A{
public void m(){
System.out.println("B");
}
public static void main(String args[]){
A x3 = new B();
x3.m();
}
}
ඒක හින්දා object type එක දිහා බලලා විතරක් අපිට හම්බෙන output එක ගැන කියන්න බෑ.ඒ මොකද compile time එකේදී බලන්නේ reference type එක නිසා.
මේ ආකාරයේ ගැටළුවක් මාගේ මිතුරෙකුට දිවයිනේ ප්රසිද්ධ software company එකකින් JAVA සම්බන්ධ සම්මුඛ පරීක්ෂණයකදී අහලා තිබුනා.IDE එකකින් develop කරද්දී නම් එච්චර වැදගත් දෙයක් නූනත් අර වගේ අවස්ථාවකදී හෝ දැනසිටීම වැදගත් කියා සිතුන නිසායි බ්ලොග් එකට ලිව්වේ.
good explanation thnx
ReplyDeletegreat post... clearly explained.
ReplyDelete