假设所有返回值
Copyable都为extension,则所有版本的getObjectCopy()返回Copyable。例如:
编辑public interface Validatevalue<O> extends Copyable{ // Other functions... @Override Copyable getObjectCopy();}public Blammy implements Validatevalue<String>{ // Other functions... @Override public Copyable getObjectCopy() { SomethingThatExtendsCopyable blammy = new SomethingThatExtendsCopyable(); return (Copyable)blammy; }}
在上面的代码中,错误是由以下事实引起的:“
getObjectCopy”方法在
Validatevalue<String>和
ValidLineGettable接口中具有不同的返回值,但调用签名相同。在Java中,仅通过更改返回值就不会获得多态。这会导致编译错误。
如果将返回值更改为,
Copyable则
TextLinevalidator不再通过扩展其两个父接口来获得值。一种更简单的方法是拥有一个接口(可复制)和实现该接口的多个类,每个类都返回一个可复制值,该值可以是扩展(或实现)可复制类的实例。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)