一尘不染

Java 如何解释接口和抽象类之间的区别?

java

在我的一次采访中,我被要求解释Interface和Abstract类之间的区别。

这是我的回应:

Java接口的方法是隐式抽象的,不能具有实现。Java抽象类可以具有实现默认行为的实例方法。

在Java接口中声明的变量默认为final。抽象类可能包含非最终变量。

默认情况下,Java接口的成员是公共的。Java抽象类可以具有类成员的常用风格,例如private,protected等。

Java接口应使用关键字“ implements”来实现;Java抽象类应使用关键字“ extends”进行扩展。

一个接口只能扩展另一个Java接口,一个抽象类可以扩展另一个Java类并实现多个Java接口。

Java类可以实现多个接口,但只能扩展一个抽象类。

但是,面试官并不满意,并告诉我此描述代表“ 书本知识 ”。

他要求我提供更实际的答复,并通过实际示例说明何时在接口上选择抽象类。

我哪里做错了?


阅读 324

收藏
2020-03-12

共1个答案

一尘不染

我先给你一个例子:

public interface LoginAuth{
   public String encryptPassword(String pass);
   public void checkDBforUser();
}

假设你的应用程序中有3个数据库。然后,该数据库的每个实现都需要定义以上两种方法:

public class DBMySQL implements LoginAuth{
          // Needs to implement both methods
}
public class DBOracle implements LoginAuth{
          // Needs to implement both methods
}
public class DBAbc implements LoginAuth{
          // Needs to implement both methods
}

但是,如果encryptPassword()不依赖数据库又对每个类都是相同的呢?那么以上将不是一个好的方法。

相反,请考虑以下方法:

public abstract class LoginAuth{
   public String encryptPassword(String pass){
            // Implement the same default behavior here 
            // that is shared by all subclasses.
   }

   // Each subclass needs to provide their own implementation of this only:
   public abstract void checkDBforUser();
}

现在,在每个子类中,我们只需要实现一个方法-该方法依赖于数据库。

2020-03-12