Жавоблар
Интерфейс таърифини келтиринг.
Интерфейс — бу усуллар жамламаси ошкор спецификацияси бўлиб, шу спецификацияни реализация қилаётган синфда бу усуллар таърифи албатта берилиши лозим. Интерфейсда бу усуллар реализацияси берилмайди. Абстракт синфлар каби интерфейслар кўплик ворисликда фойдаланиши мумкин. Конкрет синф фақат битта суперсинф вориси бўлиши мумкин лекин чекланмаган сондаги интерфейслар реализация қилиниши мумкин.
Интерфейс синфдан қандай фарқ қилади?
Синф бу усуллари сигнатураси шу синф реализация қилаётган итерфейс усуллари сигнатураси билан бир хил бўлиши лозим. Интерфейслар синфлар ворисликка асосланган иерархияси билан кесишмайдиган ўз иерархиясига эга. Бу ворислик иерархияси билан боғланмаган турли синфларда битта интрфейсни реализация қилишга имкон беради. Интерфейслар кучи шундан иборат. Интерфейслар C++ тилида кўплик ворислик механизми аналогидир, лекин улардан фойдаланиш қулайроқ
Нима учун оператор implements ишлатилади?
Оператор implements.Оператор implements — бирор интерфейс ёки интерфейсларни реализация қилувчи синф таърифига қўшимчадир
class синф_номи [extends суперсинф]
[implements интерфейс0 [, интерфейс1...]] { синф танаси }
Агар синфда бир нечта интерфейслар реализация қилинса, уларнинг номлари вергуль билан ажратилади. Қуйида интерфейсни реализация қилувчи синфга мисол берилган:
class Client implements Callback {
void callback(int p) {
System.out.println("callback called with " + p);
}
}
Интерфейс нима учун ишлатилади.
Java тилида интерфейслар усулларни дастур бажарилиши давомида динамик қўллашни (resolution) амалга ошириш учун ишлатилади. Интерфейслар синфларга ўхшайди, лекин усуллар реализацияси бўлмайди. Синф ихтиёрий сондаги интерфейсга эга бўлиши мумкин. Синфда интерфейлар усулари тўла тўпламини реализация қилиш лозим.
Оператор interface.Интерфейс таърифи синф таърифига ўхшаш, фарқи шундаки интерфейсда маълумотлар эълони ва конструкторлар йўқдир. Интерфейс таърифи умумий кўриниши:
interface ном {
натижа_типи усул_номи1(параметрлар рўйхати);
тип final1_ўзгарувчи_исми = қиймат;
}
Интерфейсда эълон қилинган усуллар танаси йўқдир. Интерфейсда эълон қилинган ўзгарувчилар кўзда тутилган бўйича final – ўзгарувчилар хисобланади. Шунинг учун реализация қилувчи синфда уларнинг қийматини ўзгартириш мумкин эмас. Бундан ташқари ўзгарувчиларни интерфейсда таърифланганда константа қиймат билан инициализация қилиниши керак.
ИНТЕРФЕЙС СИНФДАН ҚАНДАЙ ФАРҚ ҚИЛАДИ?
Интерфейсларда ўзгарувчилар.Интерфейслардан турли синфларга биргаликда фойдаланилувчи константаларни импорт қилиш учун фойдаланиш мумкин. Бу холда бирор синфда интерфейс реализация қилинса интерфейс ўзгарувчилари номлари бу синфда константа сифатида кўринади. Бу С ва C++ тилларида константларни #define директиваси ёки Pascal / Delphi тилларида const калит сўзи ёрдамида беришга мосдир.
Биргаликда ишлатиладиган константаларни турли синфларга импорт қилиш учун интерфейсдан қандай фойдаланилади?
Агар интерфейс ўз ичига усулларни олмаса, интерфейс реализацияси деб эълон қилинган синф хеч нарса реализация қилмайди. Константаларни синф номлар фазосига импорт қилиш учун final модификаторли ўзгарувчилардан фойдаланиш қулайдир.
import java.util.Random;
interface SharedConstants {
int NO = 0;
int YES = 1;
int MAYBE = 2;
int LATER = 3;
int SOON = 4;
int NEVER = 5;
}
class Question implements SharedConstants {
Random rand = new Random();
int ask() {
int prob = (int) (100 * rand.nextDouble());
if (prob < 30) return NO; // 30%
else if (prob < 60) return YES; // 30%
else if (prob < 75) return LATER; // 15%
else if (prob < 98) return SOON; // 13%
else return NEVER; // 2% } }
class AskMe implements SharedConstants {
static void answer(int result) {
switch(result) {
case NO:
System.out.println("No");
break;
case YES:
System.out.println("Yes");
break;
case MAYBE:
System.out.println("Maybe");
break;
case LATER:
System.out.println("Later");
break;
case SOON:
System.out.priniln("Soon");
break;
case NEVER:
System.out.println("Never");
break;
}
}
public static void main(String args[]) {
Question q = new Question();
answer(q.ask());
answer(q.ask());
answer(q.askO);
answer(q.ask());
}
}
Do'stlaringiz bilan baham: |