我有一个通用方法,我需要在多个类中使用它,只需从调用类中调用一次即可。所以我看到的是我可以用两种方式调用它。
public abstract class TestAbstractClass {
void commonMethod(){
System.out.println("Calling common method : TestAbstractClass");
}
}
Run Code Online (Sandbox Code Playgroud)
调用类:
public class RunApplication extends TestAbstractClass{
public void testMethod(){
commonMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
[或者]
在界面中使用默认方法的 Java 8 特性。
public interface TestInterface {
default void commonMethod(){
System.out.println("Calling common method : TestInterface");
}
}
Run Code Online (Sandbox Code Playgroud)
调用类:
public class RunApplication implements TestInterface{
public void testMethod(){
commonMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
它们对我来说都很好,但是更好的方法是使用非抽象方法的抽象类或具有默认方法的接口。
抽象类或接口
如果我是你,我会通过检查所有这些类是否相关来判断适当性。
一般来说,如果实现接口的类几乎没有关系或根本没有关系,并且它们恰好共享某些可以通过接口中的方法公开的行为,我将使用接口。
当类是其他类的子集时,我将使用抽象。
例子:
以鸟和飞机为例。鸟和飞机都会飞。但除此之外,他们根本没有任何关系。您自然会想要实现一个接口而不是使用抽象类,因为飞机都不是鸟,鸟也都不是飞机。
class Bird implements Flyable
{
@Override
public void fly(){
}
}
class Plane implements Flyable
{
@Override
public void fly(){
}
}
Run Code Online (Sandbox Code Playgroud)
另一个要考虑的问题是多重继承。在Java中,类的多重继承是不允许的。因此,如果您使用抽象,您的子类将无法扩展到另一个类。
如果您的类实现了一个接口,它总是可以实现另一个接口或扩展到另一个类。