下面编码的多态性有什么不同吗?基本上是方法调用的绑定存在差异吗?
多态性类型1:
class A
{
public void method()
{
// do stuff
}
}
class B extends A
{
public void method()
{
// do other stuff
}
}
现在我使用A
做B的事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();
我的问题是:上述两种多态性是否存在差异。我知道这两个都是运行时多态性的例子,但是[关于方法的绑定]或者其他任何不同之处是否存在差异?
答案 0 :(得分:2)
我想
之间存在一个区别Command c = CommandFactory.getCommand("Read");
和
A a = new B();
...在第一种情况下,你有无选项但是要使用界面(或只是Object
),因为赋值运算符右侧的表达式是类型Command
。
在第二种情况下,您故意选择将结果分配给A
类型的变量,即使您可以已经写过 p>
B b = new B();
这实际上只是设计选择的一个区别 - 它不会影响对c.execute()
或a.execute()
的调用实际行为的方式。
答案 1 :(得分:1)
您的Polymorphism Type 1
和Polymorphism Type 2
具有相同的多态性:)
答案 2 :(得分:0)
对于运行时行为,没有区别。但是
区别在于编译。即
在1st Type中,当您使用直接类引用时,您需要在编译时出现这两个类。
但是对于第二种类型,只在运行时才需要这些类。
答案 3 :(得分:0)
绑定(运行时)没有区别。类型1紧密耦合,而类型2松散耦合,在编译方面有所不同。