Sou*_*rya 9 java inheritance interface
可能重复:
向接口添加Extra方法
我有Interface X这样的场景,已经用我的数千个课程实现了.现在我想添加新方法Interface X.那么如何以最小的方式进行更改以解决所有类中方法被覆盖的问题
wat*_*ios 13
我会为只需要其他方法的类创建一个接口扩展...
public interface BaseInterface {
public int exampleMethod();
}
public interface ExtendedInterface extends BaseInterface {
public int anotherMethod();
}
Run Code Online (Sandbox Code Playgroud)
成千上万的课程已经实施BaseInterface.对于需要额外方法的类,您需要更改它们以实现ExtendedInterface.
如果您的对象存储在一个集合(如BaseInterface[]数组)中,这仍然有效,因为类型ExtendedInterface的对象也是类型的对象BaseInterface,因此它们仍然可以存储在同一个公共集合中.
例如,这仍然完全有效......
BaseInterface[] objects = new BaseInterface[2];
objects[0] = new ClassThatImplementsBaseInterface();
objects[1] = new ClassThatImplementsExtendedInterface();
Run Code Online (Sandbox Code Playgroud)
但是,如果您需要访问该方法的新方法ExtendedInterface,但该对象存储在一个BaseInterface集合中,您需要ExtendedInterface先将其强制转换为一个,然后才能使用它...
BaseInterface[] objects = new BaseInterface[1];
objects[0] = new ClassThatImplementsExtendedInterface();
if (objects[0] instanceof ExtendedInterface){
// it is an ExtendedInterface, so we can call the method after we cast it
((ExtendedInterface)objects[0]).anotherMethod();
}
else {
// it is a BaseInterface, and not an ExtendedInterface
}
Run Code Online (Sandbox Code Playgroud)
根据您的使用情况,这可能适用也可能不适用.
如果您确实需要所有数千个对象来实现新方法,则必须将该方法添加到该方法BaseInterface,然后使用IDE或文本编辑器的功能在所有类中实现该方法.例如,您可以在文本编辑器中打开它们并执行查找替换以查找每个类共有的内容,并将其替换为公共代码+新方法的默认代码.非常快速,无痛.我确信某些IDE可能还会自动将方法声明添加到所有继承类,或者至少可以选择在右键单击菜单中执行此操作.
没有简单的方法可以做到这一点。如果向接口添加方法,则所有实现类都必须重写该方法。如果将接口更改为抽象类,那么您还必须重构实现类。
但你有一个类层次结构吗?因此,您可以通过仅在基类中实现该方法来最大限度地减少工作量。但这取决于您的具体要求和细节,所以我想实施愉快!
如果没有简单的类层次结构可以用来实现这样的新方法,那么也许是时候考虑进行重大重写以减少未来的维护工作了。