JavaRush /Java блогы /Random-KK /Неліктен интерфейстер қажет?
Павел
Деңгей

Неліктен интерфейстер қажет?

Топта жарияланған
Неліктен интерфейстер қажет? Неліктен интерфейс мұрасы қажет? Полиморфизм не үшін қажет? Интерфейстерді қалай жасау керектігін оқып, түсінген, бірақ неге екенін түсінбегендер үшін.

Жауапкершіліктен бас тарту: Осы және одан кейінгі мақалаларда сыныптар мен әдістердің атаулары орыс тілінде беріледі.

Объектіге бағытталған бағдарламалаудың (OOP) принциптеріне келетін болсақ: полиморфизм, мұрагерлік және инкапсуляция, нақты әлемдегі ұқсастықтарды пайдалану пайдалы. OOP-тің үлкен артықшылығы - біз бағдарламада нақты ғаламның бір бөлігін имитациялай аламыз. Ivanовтар отбасын үлгі етейік: әкем , анам және балам Петя . Әкесінен Петя шай ішкен кезде сөйлейтін әдетін, ал анасынан кітап оқып отырып еріндерін жыбырлату әдетін мұра етті. Егер біз бұл жағдайды бағдарламаға енгізуге тырыссақ, біз үш сыныпқа ие боламыз:
class Папа
class Мама
class Петя
Әкем мен анамның Питке беруі керек әдеттері бар . Әдеттер - бұл қандай да бір әрекеттер, сондықтан оларды бағдарламалық жасақтама әлемінде әдістер ретінде жүзеге асырған дұрыс: Әке Бірінші :
class Папа {
public void прихлюпывать() {
System.out.println("Хлюп");
    }
}
Енді анам :
class Мама {
public void поджимать() {
System.out.println("Поджать губки");
   }
}
Егер біз мұрагерлік туралы айтатын болсақ, онда codeты келесідей жазу қисынды:
class Петя extends Папа, Мама {
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Яғни, Петяны әке мен анадан бір мезгілде мұра ету . Егер сіз оны осылай жазсаңыз, компилятор шағымданады, себебі Java бірнеше класс мұрасын жүзеге асыра алмайды. Айтпақшы, бұл C++ тілінде мүмкін, бірақ Java-да мүмкін емес, өйткені көп мұрагерлікпен үлкен мәселелер туындауы мүмкін: олар Интернетте егжей-тегжейлі жазады . Бұл «мүмкін емес» әрекетті айналып өту үшін Java интерфейстері бар. Ал әдеттер үшін біз өз интерфейсімізді ойлап табамыз. Тіпті екі: Олар келесідей болады: Неліктен интерфейстер қажет?  - 1
public interface ПривычкиПапы {
    public void прихлюпывать();
}
public interface ПривычкиМамы {
    public void поджимать();
}
Интерфейсте біз әдеттер туралы ғана сипаттадық, бірақ олардың нақты не істейтінін сипаттамадық, өйткені біз сабақтарда нақты іске асыруды жазамыз. Алдымен әкем мен анама заңды әдеттерін берейік .
class Папа implements ПривычкиПапы {

   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}

class Мама implements ПривычкиМамы{

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Ал енді әке мен анадан Питке әдеттерді бір уақытта ауыстыру мүлдем заңды
class Петя implements ПривычкиПапы, ПривычкиМамы {

@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Яғни Java-да бірнеше енгізу (көбінесе іске асыру деп аталады) әбден мүмкін. Неліктен интерфейстер қажет?  - 2Интерфейстердің мағынасы енді анық болуы керек - Java тілінде интерфейстерді пайдаланып бірнеше мұраны жүзеге асыруға болады. Егер жағдайды одан әрі дамытатын болсақ, мысалы: әкем мен анамның Петяға бермейтін әдеттері болуы мүмкін , ал Петяның жеке әдеттері болуы мүмкін. Сіз келесі эпизодтарда осы өмірлік маңызды Санта-Барбараны Java ұшағына қалай тасымалдау керектігін білесіз. Бұл интерфейстерді түсінудің жалғыз мысалы емес.Егер сіз келесі мақалаларды оқымаған болсаңыз, міндетті түрде оқыңыз: Java тіліндегі интерфейстер (ашық болмаса, профиліңізден шығуға немесе инкогнито режимінде оқуға болады) Неліктен интерфейстер қажет Java - осы жерде мақаладағы барлық мысалдарды орындаңыз және әдістерді интерфейстерде де, сыныптарда да өзгертіңіз: әдістердің атаулары, қолтаңбалар (әдіс енгізу ретінде не қабылдайды), әдістердің шығару түрлері. Өз бетіңізше түсініңіз: - класс пен абстрактілі класспен интерфейсті жүзеге асыру кезіндегі айырмашылықты; - әдепкі әдістер.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION