Jest sobie przykładowa prosta klasa abstrakcyjna:
public abstract class MojaKlasa
{
private int mnoznik;
private int wynik;
public MojaKlasa(int mnoznik)
{
this.mnoznik = mnoznik;
}
public void pomnoz(int liczba)
{
wynik = liczba * mnoznik;
onCalculate();
}
public int getWynik()
{
return wynik;
}
protected abstract void onCalculate();
}
to gdy w IntelliJ wpiszę:
MojaKlasa mojaKlasa = new MojaKlasa
to po klepnięciu Entera IntelliJ automatycznie wygeneruje szablon z metodą "onCalculate", wystarczy tylko uzupełnić parametr konstruktora i metodę "onCalculate":
MojaKlasa mojaKlasa = new MojaKlasa(10)
{
@Override
protected void onCalculate()
{
System.out.println("Wynik: " + this.getWynik());
}
};
mojaKlasa.pomnoz(2);
Wywołanie metody "pomnoz" powoduje wypisanie w konsoli oczekiwanego tekstu "Wynik: 20".
No więc to działa (w Java 13), ale dlaczego daje się w ten sposób użyć (utworzyć instancję) klasy abstrakcyjnej, czyli z operatorem "new"?