16. Interface

Oldingi bobda abstract class bilan tanishdik.

Java'da abstraction yaratishning yana bir muhim usuli — interface.

Interface'ni oddiy qilib:

Class qanday methodlarga ega bo‘lishi kerakligini belgilaydigan qoida.

deb tushunish mumkin.

Interface yaratish

Interface yaratish uchun interface so‘zi ishlatiladi.

interface Animal {

    void ovoz();
}

Bu yerda Animal — interface.

ovoz() esa interface ichidagi method.

Interface'dan foydalanish

Class interface'dan foydalanish uchun implements so‘zini ishlatadi.

class Dog implements Animal {

    @Override
    public void ovoz() {
        System.out.println("Vov-vov!");
    }
}

Bu yerda:

Dog implements Animal

Dog Animal interface'idan foydalanayotganini bildiradi.

To‘liq misol

interface Animal {

    void ovoz();
}

class Dog implements Animal {

    @Override
    public void ovoz() {
        System.out.println("Vov-vov!");
    }
}

public class Main {

    public static void main(String[] args) {

        Dog it = new Dog();

        it.ovoz();
    }
}

Natija:

Vov-vov!

Interface'da bir nechta method

Interface ichida bir nechta method bo‘lishi mumkin.

interface Animal {

    void ovoz();

    void ovqatlan();
}

Dog ikkala methodni ham yozishi kerak.

class Dog implements Animal {

    @Override
    public void ovoz() {
        System.out.println("Vov-vov!");
    }

    @Override
    public void ovqatlan() {
        System.out.println("It ovqatlanyapti.");
    }
}

Bir nechta class bitta interface'dan foydalanishi mumkin

Masalan:

interface Animal {

    void ovoz();
}

Dog:

class Dog implements Animal {

    @Override
    public void ovoz() {
        System.out.println("Vov-vov!");
    }
}

Cat:

class Cat implements Animal {

    @Override
    public void ovoz() {
        System.out.println("Miyov!");
    }
}

Endi:

Animal it = new Dog();
Animal mushuk = new Cat();

it.ovoz();
mushuk.ovoz();

Natija:

Vov-vov!
Miyov!

Bu yerda interface polymorphism bilan birga ishlayapti.

Bir class bir nechta interface ishlatishi mumkin

Java'da class faqat bitta classdan extends qilishi mumkin.

Lekin bir nechta interface'ni implements qilishi mumkin.

Masalan:

interface Flyable {

    void uch();
}

interface Swimmable {

    void suz();
}

Endi Duck ikkala interface'dan foydalanadi:

class Duck implements Flyable, Swimmable {

    @Override
    public void uch() {
        System.out.println("O‘rdak uchmoqda.");
    }

    @Override
    public void suz() {
        System.out.println("O‘rdak suzmoqda.");
    }
}

extends va implements

Bu ikkita so‘zni adashtirmang.

Classdan meros olish:

class Dog extends Animal {
}

Interface'dan foydalanish:

class Dog implements Animal {
}

Qisqacha:

extends     → class
implements  → interface

Interface va abstract class

Ikkalasi ham abstraction uchun ishlatiladi.

Abstract class:

abstract class Animal {

    abstract void ovoz();
}

Interface:

interface Animal {

    void ovoz();
}

Hozircha eng muhim farqni eslab qoling:

abstract class → extends
interface      → implements

Real hayotdagi misol

Masalan, turli qurilmalar ovoz chiqara oladi.

Biz interface yaratamiz:

interface Soundable {

    void ovozChiqar();
}

Telefon:

class Phone implements Soundable {

    @Override
    public void ovozChiqar() {
        System.out.println("Telefon ovoz chiqarmoqda.");
    }
}

Kompyuter:

class Computer implements Soundable {

    @Override
    public void ovozChiqar() {
        System.out.println("Kompyuter ovoz chiqarmoqda.");
    }
}

Ikkala class ham Soundable qoidasiga amal qiladi.

Amaliy mashqlar

1-mashq

Animal interface yarating.

Unda:

void ovoz();

methodi bo‘lsin.

Keyin Dog va Cat classlarini yarating.

2-mashq

Vehicle interface yarating.

Unda:

void yur();

methodi bo‘lsin.

Car va Bus classlari undan foydalansin.

3-mashq

Flyable interface yarating.

Unda:

void uch();

methodi bo‘lsin.

Keyin Bird classini yarating.

4-mashq

Quyidagi ikkita interface yarating:

Flyable
Swimmable

Keyin Duck classi ikkala interface'dan ham foydalansin.

Muhim narsalarni eslab qoling

Interface — classlar uchun umumiy qoida belgilaydi.

Interface yaratish:

interface Animal {

    void ovoz();
}

Interface'dan foydalanish:

class Dog implements Animal {
}

Bir class bir nechta interface ishlatishi mumkin:

class Duck implements Flyable, Swimmable {
}

extends — classdan meros olish uchun.

implements — interface'dan foydalanish uchun.

Interface abstraction va polymorphism yaratishda juda muhim.