Main.java
package com.company;

abstract class Zwierzak {
    public int waga = 100;                  // właściwość
    public abstract void podajGatunek() ;   // metoda abstrakcyjna
    public void metodaZwierzaka(){
        System.out.println("-->Jestem nieabstrakcyjną metodą zwierzaka");
    }
}



class Kon extends Zwierzak {
    @Override
    public void podajGatunek() {
        System.out.println("-->Mój gatunek koń");
    }
}

class Kot extends Zwierzak {
    @Override
    public void podajGatunek() {
        System.out.println("-->Mój gatunek kot");
    }
}

class Pies extends Zwierzak {
    @Override
    public void podajGatunek() {
        System.out.println("-->Mój gatunek pies");
    }
}

public class Main {

    public static void main(String[] args) {



        Zwierzak zwierzak = new Zwierzak() {
            @Override
            public void podajGatunek() {
                // Obiekt klasy abstrakcyjnej musi mieć
                // zaimplementowane wszystkie metody abstrakcyjne
            }
        };

        Zwierzak kon = new Kon();
        kon.podajGatunek();

        new Kot().podajGatunek();
        new Pies().podajGatunek();

        var kocur = new Kot();  // Java 10+
        kocur.podajGatunek();

        // Klasa anonimowa nie ma nazwy.
        // Klasy anonimowe służą do tworzeniem jej jedynej instancji
        // Porównać co będzie jeśli zamiast var będzie Zwierzak

        var nowyZwierz = new Zwierzak() {
            public int nalot = 123;
            @Override
            public void podajGatunek() {
                System.out.println("-->Mój gatunek anonimowy, " +
                        "nie jestem już klasy Zwierzak ani żadnej innej nazwanej klasy");
            }
            public void podajWysokosc(){
                System.out.println("-->Mam wysokość jaką mam");
            }
        };

        System.out.println("Nalot = " + nowyZwierz.nalot);
        System.out.println("Waga  = " + nowyZwierz.waga);

        nowyZwierz.podajGatunek();
        nowyZwierz.podajWysokosc();
    }
}