我怎样才能保证实现接口的类也扩展了类?

时间:2015-06-12 16:38:43

标签: java inheritance interface

我有这段代码:

public class Animate {} // external api <--------------

public class Cat extends Animate {} // written by me

public interface Walks {} // also written by me

如果有什么东西可以强制执行,那么我该如何强制执行呢?

4 个答案:

答案 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 { ... }