Commit 8ee56f9f by Patryk Czarnik

Interfejsy - wersja klasyczna

parent de62d82b
package p13_lambdy;
public interface FunkcjaLiczbowa {
double oblicz(double x);
}
package p13_lambdy;
public class PrzykladyNiefunkcyjne {
public static void main(String[] args) {
// Jeśli mam zdefiniowaną klasę zgodną z interfejsem, to po prostu tworzę obiekt tej klasy.
// Mogę wpisać do zmiennej typu zgodnego z klasą:
TradycyjnaImplementacjaInterfejsu obiekt1 = new TradycyjnaImplementacjaInterfejsu();
// mając obiekt, mogę wywołać jego metody:
System.out.println(obiekt1);
System.out.println(obiekt1.oblicz(3));
System.out.println(obiekt1.akuku());
System.out.println();
// Tak stworzony obiekt mogę też wpisać do zmiennej typu interfejsowego:
FunkcjaLiczbowa obiekt2 = new TradycyjnaImplementacjaInterfejsu();
System.out.println(obiekt2);
System.out.println(obiekt2.oblicz(4));
// W tej sytuacji można wywoływać tylko te metody, które są zadeklarowane w interfejsie (plus equals, hashCode i toString)
// System.out.println(obiekt2.akuku());
// można po jawnym zrzutowaniu:
System.out.println(((TradycyjnaImplementacjaInterfejsu)obiekt2).akuku());
System.out.println();
// Od początków Javy dostępny jest taki skrótowy sposób tworzenia obiektu, który jest zgodny z interfejsem.
// Nazywa się to "klasa anonimowa":
FunkcjaLiczbowa obiekt3 = new FunkcjaLiczbowa() {
public double oblicz(double x) {
return x*x*x;
}
};
System.out.println(obiekt3);
System.out.println(obiekt3.oblicz(3));
}
}
package p13_lambdy;
public class TradycyjnaImplementacjaInterfejsu implements FunkcjaLiczbowa {
// Sposób implementacji interfejsów dostępny od samego początku języka Java:
// tworzymy klasę, w której piszemy "implements Interfejs" i wewnątrz definiujemy
// wszystkie te metody, które deklaruje interfejs. Metody muszą być publiczne.
// Akurat ta klasa realizuje funkcję podnoszenia do kwadratu.
// Przed implementacją metody z interfejsu można napisac @Override - wtedy kompilator sprawdzi czy naprawdę implementujemy metodę z interfejsu (lub nadpisuje metodę z nadklasy)
@Override
public double oblicz(double x) {
return x*x;
}
// poza metodami z interfejsu, można dodawać inne:
public String akuku() {
return "a kuku!";
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment