Java абстрактные классы, которые бросают

Если у меня есть абстрактный класс со следующей функцией -

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

И затем другой класс, который расширяет абстрактный класс и реализует свою собственную версию foo -

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

Это создаст проблемы? В частности, в следующем тестовом примере -

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

Я провел некоторое тестирование, и, похоже, ничего не сломалось, но я не понимаю, почему Foo был назван B, а не A

Ответы на вопрос(4)

Ваш ответ на вопрос