我有两个应该相互排斥的接口:
interface Animal{}
interface Cat extends Animal{}
interface Bird extends Animal{}
Run Code Online (Sandbox Code Playgroud)
如何防止实现两者Cat和Bird接口的类的实现?
class Impossible implements Cat, Bird{}
Run Code Online (Sandbox Code Playgroud)
Pet*_*der 10
最后一个肮脏的解
public interface Animal<BEING extends Animal> {}
public interface Cat extends Animal<Cat> {}
public interface Bird extends Animal<Bird> {}
public class CatBird implements Cat, Bird {} // compiler error
public interface CatBird extends Cat, Bird {} // compiler error
Run Code Online (Sandbox Code Playgroud)
CatBird无法实施,因为:
接口Animal不能使用不同的参数多次实现:Animal <Bird>和Animal <Cat>
在这里你有一个清晰的层次结构 - 一个带分支的根,很明显一个节点(类,接口,等等)不能在多个分支上.为了强制执行此操作,请使用抽象类而不是接口.
当存在某些交叉方面时可以使用接口,这些方面可以在层次结构中的任何类之间共享,并且没有两个接口是互斥的.
例:
public abstract class Animal;
public interface CanFly;
public interface CanHunt;
public abstract class Cat extends Animal implements CanHunt;
public abstract class Bird extends Animal implements CanFly;
public class Vulture extends Bird implements CanHunt; //also CanFly because of Bird
Run Code Online (Sandbox Code Playgroud)
至少有一个人考虑过这个问题:http://instantbadger.blogspot.co.uk/2006/10/mutually-exclusive-interfaces.html
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |