一个java接口说“TestInterface”有2个方法method1()
,method2()
由100个不同的类实现。现在我需要引入一个新方法,TestInterface
而不需要对已经实现它的其他类进行更改。我如何在java中实现它?
3 回答
从Java8:
例如,如果多个类(如A
、B
、C
和D
XYZInterface
XYZInterface
A
B
C
D
) 实现了这个接口。在这个例子中,我们只有四个类实现了我们想要更改的接口,但想象一下,如果有数百个类实现一个接口,那么几乎不可能更改所有这些类中的代码。这就是为什么在 java 8 中,我们有一个新概念“默认方法”。这些方法可以添加到任何现有的接口中,我们不需要在实现类中强制实现这些方法,因此我们可以在不破坏代码的情况下将这些默认方法添加到现有接口中。
可以说,java 8 中引入了默认方法的概念,以在现有接口中添加新方法,使其向后兼容。向后兼容性是在不破坏旧代码的情况下添加新功能。
中的方法newMethod()
是MyInterface
默认方法,也就是说我们不需要在实现类中实现这个方法Example
。通过这种方式,我们可以将默认方法添加到现有接口,而无需担心实现这些接口的类。
interface MyInterface{
/* This is a default method so we need not
* to implement this method in the implementation
* classes
*/
default void newMethod(){
System.out.println("Newly added default method");
}
/* Already existing public and abstract method
* We must need to implement this method in
* implementation classes.
*/
void existingMethod(String str);
}
public class Example implements MyInterface{
// implementing abstract method
public void existingMethod(String str){
System.out.println("String is: "+str);
}
public static void main(String[] args) {
Example obj = new Example();
//calling the default method of interface
obj.newMethod();
//calling the abstract method of interface
obj.existingMethod("Java 8 is easy to learn");
}
}
根据我的经验,最好的方法通常是扩展你的界面
public interface TestInterfaceEx extends TestInterface
然后,您可以向 TestInterfaceEx 添加方法,让您想要实现的类,并使用
if (myinstance instanceof TestInterfaceEx) {
myinstanceEx = (TestInterfaceEx) myinstance;
//...
}
在您想使用此新功能的地方
现在从 java 8 开始,您可以在接口中添加默认方法,该方法(接口中的默认方法)存在于所有将实现它的类中......
前任 : -
public class Java8Tester {
public static void main(String args[]) {
Vehicle vehicle = new Car();
vehicle.print();
}
}
interface Vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
static void blowHorn() {
System.out.println("Blowing horn!!!");
}
}
interface FourWheeler {
default void print() {
System.out.println("I am a four wheeler!");
}
}
class Car implements Vehicle, FourWheeler {
public void print() {
Vehicle.super.print();
FourWheeler.super.print();
Vehicle.blowHorn();
System.out.println("I am a car!");
}
}