page précédentetable des matiиrespage suivante

Интерфейси

Понятието интерфейс предствлява следващата стъпка след абстрактния клас. Интерфейса представлява декларация на съвкупност от методи и константи. Методите са декларирани с прототиповете си - тип на резултата, име, брой и тип на аргументите. Te като нямат тяло - няма описание на метода. . От интерфейс не може да бъде създаван обект.

За дефиниране на интерфейс се използва синтаксис аналогичен с декларацията на клас:

[public] interface name [extends interface1,interface2, ...] {
        modifier type constant;
        …
        modifier type methode( parametres );
        …
}

Целта на на интерфейса е деклариране на методи, които трябва задължително да присъстват в класовете, които ги използват. Ако един клас наследява методите на даден интефейс се кава, че той "прилага" (implements) този интерфейс.

Както и класа интерфейса дефинира нов тип. Всеки обект, който прилага този интерфейс може да се разглежда като обект от този тип и следователно притежава всички методи и константи декларирани в интерфейса.   

Важно:

За да се приложи интерфейса в производен клас се използва декларацията:

[public] class fille implements service {
        ...
}

Производният клас "fille" трябва да дефинира всички методи, декларирани в интерфейса  "service". Ако "service" наследява други интерфейси, класът "fille" трябва да да дефинира също всички методи от наследените интерфейси.

Наследените методи трябва да бъдат дефинирани "public".

Java не разрешава множествено наследяване - всеки клас може да наследява един единствен базов клас. Всеки клас обаче може да прилага повече от един интерфейс. По този начин се заобикаля едно от големите ограничения в езика и да се използват  някои от подходите на множественото наследяване.
 
 


 
 
 
 

//: Music.java
// Interfaces

import java.util.*;

interface Instrument { // Само декларации на методите:
        int k = 5; // static & final; constant
        void play(); // Автоматично  public
        void adjust();
}

interface Name {
        String what();
}

class Wind implements Instrument,Name {
        public void play() { System.out.println("Wind.play()"); }
        public String what() { return "Wind" + k+ "->"; }
        public void adjust() {}
}

class Percussion implements Instrument,Name {
        public void play() { System.out.println("Percussion.play()"); }
        public String what() { return "Percussion" +k+ "->"; }
        public void adjust() {}
}

class Stringed implements Instrument,Name {
        public void play() { System.out.println("Stringed.play()"); }
        public String what() { return "Stringed" +k+ "->"; }
        public void adjust() {}
}

class Brass extends Wind {
        public void play() { System.out.println("Brass.play()"); }
        public void adjust() {
                System.out.println("Brass.adjust()");
        }
}

class Woodwind extends Wind {
        public void play() {
                System.out.println("Woodwind.play()");
        }
        public String what() { return "Woodwind" +k + "->"; }
}

public class Music {
    // Doesn't care about type, so new struments
    // added to the system still work right:
        static void tune(Instrument i) {
                i.play();
        }
        static void tuneAll(Instrument[] e) {
                for(int i = 0; i < e.length; i++)
                        tune(e[i]);
        }

        public static void main(String[] args) {
                Instrument[] orchestra = new Instrument[5];
                int i = 0;
// Upcasting :
                orchestra[i++] = new Wind();
                orchestra[i++] = new Percussion();
                orchestra[i++] = new Stringed();
                orchestra[i++] = new Brass();
                orchestra[i++] = new Woodwind();
                tuneAll(orchestra);

                Name[] orchestra1 = new Name[5];
                i=0;
                orchestra1[i++] = new Wind();
                orchestra1[i++] = new Percussion();
                orchestra1[i++] = new Stringed();
                orchestra1[i++] = new Brass();
                orchestra1[i++] = new Woodwind();
                for(i=0;i<5;i++) System.out.println(orchestra1[i].what());
        }
}

java Music

 


Wind.play()
Percussion.play()
Stringed.play()
Brass.play()
Woodwind.play()
Wind5->
Percussion5->
Stringed5->
Wind5->
Woodwind5->


 

page précédentetable des matiиrespage suivante