interface එකක ඇති ප්රධාන ලක්ෂණ ගැන අපි සලකා බලමු.
- interface එකක් යනු සම්පූර්ණයෙන්ම abstract class එකකි.
- interface එකක ඇති methods සියල්ලම අර්ථදක්වා(define) ඇත්තේ method body එකකින් තොරවය(මෙයට හේතුව interface එක fully abstract වීමයි. එමනිසා මෙහි methods සියල්ලක්ම abstract වේ)
- interface එකක් තුල class variables (උදා : private int age;) පැවතිය නොහැක. නමුත් final attributes පැවතිය හැක(උදා: private final SIZE=512;)
- class එකකට අවශ්ය නම් interface එකකට වැඩි ප්රමාණයක් භාවිතා කල හැක. එනම් class එකකට අවශ්ය නම් interface එකකට වැඩි ප්රමාණයක් implement කල හැක. මේ සඳහා implement keyword එක භාවිතාවේ.
- යම් class එකක් interface එකක් implement කර ඇත්නම් එම interface එකෙහි ඇති සියලුම methods override කිරීම අනිවාර්යයෙන්ම කල යුතුය.
- class එක abstract නම් එසේ අවශ්ය නොවේ.
- class වලදී මෙන් inheritance සංකල්පය interface සඳහාද භාවිතා කල හැක. එනම් interface එකකදී වෙනත් interface එකක් extend කල හැක.
- multiple inheritance නම් සංකල්පය C++ වලදී මෙන් java තුලදී කිරීමට ඉඩදී නොමැති වුවද, මෙම interface සංකල්පය යොදාගෙන එම ක්රියාවලිය ඉටුකරගත හැක.
අපි දැන් බලමු interface එකක් ලිවීම සඳහා භාවිතා වන syntax එක
interface MyInterface { final int VAL=512; void myMethod1(); int myMethod2(); ...................... ...................... }දැන් අපි බලමු interface සංකල්පයේ යෙදීම් ආදර්ශනය කිරීමට ලියන ලද සරල වැඩසටහනක්
/** *class : CarControllerDemo *Author : Kanishka Dilshan *Purpose: Describe interface concept in Java *Blog : http://javaxclass.blogspot.com */ interface CarController{ final float MAX_SPEED=320f; void accelerate(); //accelerate the car void applyBreak(); //apply breaks } class BMW implements CarController{ private String model; private float speed; public BMW(String model){ this.model=model; speed=0f; } public void accelerate(){ //implementing accelerate() method in the interface if(speed < MAX_SPEED) speed+=15; } public void applyBreak(){ //implementing applyBreak() method in the interface if(!((speed-20) < 0)) speed-=20; else speed=0; } public void showDetails(){ System.out.println("Car model : "+model); System.out.println("Speed : "+speed); } } //another car called Nissan implements CarController interface class Nissan implements CarController{ private String model; private float speed; public Nissan(String model){ this.model=model; speed=0f; } public void accelerate(){ //implementing accelerate() method in the interface if(speed < MAX_SPEED) speed+=15; } public void applyBreak(){ //implementing applyBreak() method in the interface if(!((speed-25) < 0)) speed-=25; else speed=0; } public void showDetails(){ System.out.println("Car model : "+model); System.out.println("Speed : "+speed); } } public class CarControllerDemo{ public static void main(String args[]){ //creating BMW car object BMW car1=new BMW("BMW M6"); Nissan car2=new Nissan("Altima Sedan"); //accelerate car1 twice car1.accelerate(); car1.accelerate(); //applyBreak() for car1 car1.applyBreak(); car1.showDetails(); //accelerate car2 4 times car2.accelerate(); car2.accelerate(); car2.accelerate(); car2.accelerate(); //applyBreak() for car2 car2.applyBreak(); car2.showDetails(); } }Output:
පැහැදිලි කිරීම:
ඉහත උදාහරණයේ Line8 සිට Line13 දක්වා ඇත්තේ define කරන ලද interface එකයි. BMW සහ Nissan යන class තුලදී implement කර ඇත්තේ එම interface එක තුල ඇති accelerate() සහ applybreak() යන methods දෙකයි. මීට පෙර පාඩම් වලදී උගත් සිද්ධාන්ත භාවිතා කරමින් ඉහත කේතයේ අනෙකුත් කොටස් අවබෝධ කිරීම ඔබගේ කාර්යයකි.
ජාවා ක්රමලේඛන භාෂාව යොදාගෙන වැඩසටහන් ලිවීමේදී පහත අවස්ථා වලදී මෙම interface භාවිතය ප්රායෝගිකව දැකගත හැකිය.
- Event handling
- Database connectivity
Inside an interface you cannot have any private variables whether its final or not.All the interface variables are constants.By default they are public static final. Try to use keywords like "private and protected " inside an interface .Compiler will sue you !
ReplyDeleteNice post ! Im sure it helps lot of people.Keep going !!
mama nam me blog eka danagaththe ape cls eke sir kenekgen.bohoma wadhagath wage.mama palaweni post eke indan kiyawagana enawa.digatama meka karagana yanna subha pathanawa
ReplyDeleteනියමයි keep it up
ReplyDeleteVery much useful for my studies... thanks
ReplyDelete