package com.company; interface Zwierzak { int waga = 99; // właściwość statyczna void podajGatunet() ; default void dodatek(){ System.out.println("-->Dodatkowa metoda"); } } class Funkcja { static public void funkcja(Zwierzak zwierz) { zwierz.podajGatunet(); } } // Argumentem funkcji jest interface, w którym najważniejsza jest funkcja public class Main { public static void main(String[] args) { Funkcja.funkcja(new Zwierzak() { @Override public void podajGatunet() { System.out.println("-->Mój gatunek podany w implementacji1"); } }); Funkcja.funkcja(() -> { System.out.println("-->Mój gatunek podany w implementacji2"); System.out.println("-->Mój gatunek podany w implementacji2"); }); //funkcja anonimowa Funkcja.funkcja(() -> System.out.println("-->Mój gatunek podany w implementacji3")); Zwierzak dodatkowy = new Zwierzak() { @Override public void podajGatunet() { } }; dodatkowy.dodatek(); } }