我如何保证实现接口的 class 也扩展了 class?
How can I guarantee that a class that implements an interface also extends a class?
我有这个代码:
public class Animate {} // external api <--------------
public class Cat extends Animate {} // written by me
public interface Walks {} // also written by me
如果有东西在行走,我该如何强制要求它必须是有生命的?
抽象 class 可以扩展 class,这是它可能有用的罕见情况之一。
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
}
制作一个扩展 Animate 的 class,没有额外的方法并实现 Walks(它与 Animate 相同,但它是你的)
public class MyAnimate extends Animate implements Walks{} // your own Animate
public class Cat extends MyAnimate {}
你不能。
接口只是定义了一个 API,并不强制实施。
如果您希望某些东西既实现接口又扩展实现,只需创建一个抽象基础 class 来实现两者并从那里扩展:
public class WalkingAnimate extends Animate implements Walks {
public abstract ... // abstracts methods from Walks
}
public class Cat extends WalkingAnimate {
...
}
因为 class Animate
是外部的你不能改变它,但是你可以在你的代码中 subclass 它:
public abstract class AnimatedWalk extends Animate implements Walk {}
因此,从您新创建的 AnimatedWalk
继承的每个 class 都是 Animate
并且必须实现 Walk
public class Cat extends AnimatedWalk { ... }
我有这个代码:
public class Animate {} // external api <--------------
public class Cat extends Animate {} // written by me
public interface Walks {} // also written by me
如果有东西在行走,我该如何强制要求它必须是有生命的?
抽象 class 可以扩展 class,这是它可能有用的罕见情况之一。
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
}
制作一个扩展 Animate 的 class,没有额外的方法并实现 Walks(它与 Animate 相同,但它是你的)
public class MyAnimate extends Animate implements Walks{} // your own Animate
public class Cat extends MyAnimate {}
你不能。
接口只是定义了一个 API,并不强制实施。
如果您希望某些东西既实现接口又扩展实现,只需创建一个抽象基础 class 来实现两者并从那里扩展:
public class WalkingAnimate extends Animate implements Walks {
public abstract ... // abstracts methods from Walks
}
public class Cat extends WalkingAnimate {
...
}
因为 class Animate
是外部的你不能改变它,但是你可以在你的代码中 subclass 它:
public abstract class AnimatedWalk extends Animate implements Walk {}
因此,从您新创建的 AnimatedWalk
继承的每个 class 都是 Animate
并且必须实现 Walk
public class Cat extends AnimatedWalk { ... }