我有这段代码:
public class Animate {} // external api <--------------
public class Cat extends Animate {} // written by me
public interface Walks {} // also written by me
如果有什么东西可以强制执行,那么我该如何强制执行呢?
答案 0 :(得分:4)
抽象类可以扩展一个类,这是可能有用的罕见情况之一。
abstract class AnimatedAbstractWalker extends Animate {
// class gets concrete methods from Animate
// and any abstract walk methods you want to add
// (this replaces the Walk interface)
}
class Cat extends AnimatedAbstractWalker {
// inherits standard animation implementation
// you must implement walking like a cat
}
class Dog extends AnimatedAbstractWalker {
// inherits standard animation implementation
// you must implement walking like a dog
}
答案 1 :(得分:3)
创建一个扩展Animate的类,没有额外的方法并实现Walks(它将与Animate相同,但它将是你的)
public class MyAnimate extends Animate implements Walks{} // your own Animate
public class Cat extends MyAnimate {}
答案 2 :(得分:1)
你不能。
接口只定义了一个API,并没有强制执行。
如果你想要的东西都实现了一个接口并扩展了一个实现,那么只需创建一个抽象基类同时执行它们并从那里扩展:
public class WalkingAnimate extends Animate implements Walks {
public abstract ... // abstracts methods from Walks
}
public class Cat extends WalkingAnimate {
...
}
答案 3 :(得分:1)
由于课程Animate
是外部的,您无法对其进行更改,但您可以在代码中对其进行子类化:
public abstract class AnimatedWalk extends Animate implements Walk {}
因此,从新创建的AnimatedWalk
继承的每个类都是Animate
,必须实现Walk
public class Cat extends AnimatedWalk { ... }