Есть ли разница в полиморфизме, закодированном ниже? Есть ли разница в привязке вызовов метода?
Полиморфизм Тип 1:
class A
{
public void method()
{
// do stuff
}
}
class B extends A
{
public void method()
{
// do other stuff
}
}
Теперь я делаю вещи с помощью B, используя A
A a = new B();
a.method();
Полиморфизм тип 2:
public interface Command
{
public void execute();
}
public class ReadCommand implements Command
{
public void execute()
{
//do reading stuff
}
}
public class WriteCommand implements Command
{
public void execute()
{
//do writing stuff
}
}
public class CommandFactory
{
public static Command getCommand(String s)
{
if(s.equals("Read"))
{
return new ReadCommand();
}
if(s.equals("Write"))
{
return new WriteCommand();
}
return null;
}
}
Теперь я использую фабрику команд:
Command c = CommandFactory.getCommand("Read");
c.execute();
Мой вопрос: есть ли разница в двух вышеупомянутых полиморфизмах? Я знаю, что оба являются примерами полиморфизма во время выполнения, но есть ли какое-либо различие [в отношении связывания методов] или какое-либо другое различие в этом отношении?