Java abstrakte Klassen, die werfen

Wenn ich eine abstrakte Klasse mit der folgenden Funktion habe -

abstract class A{
    void foo(String s) throws Exception{
        throw new Exception("exception!");
    }
}

Und dann noch eine Klasse, die die abstrakte Klasse erweitert und eine eigene Version von foo implementiert -

class B extends A{
    void foo(String s){
        //do stuff that does *not* throw an exception
    }
}

Wird dies zu Problemen führen? Speziell im folgenden Testfall -

Collection<A> col = new Collection<A>();
B b = new B();
col.add(b);
for(A a : col){
    a.foo();
}

Ich habe ein paar Tests gemacht und nichts scheint kaputt zu sein, aber ich verstehe nicht, warum B's foo heißt und nicht A's

Antworten auf die Frage(4)

Ihre Antwort auf die Frage