我应该如何解释Interface和Abstract类之间的区别?

问题:

在我的一次采访中,我被要求解释接口抽象课之间的区别
这是我的回应:

Java接口的方法是隐式抽象的,不能有实现。 Java抽象类可以具有实现默认行为的实例方法。
在Java接口中声明的变量是默认的final。抽象类可能包含非最终变量。
默认情况下,Java接口的成员是公共的。 Java抽象类可以具有通常的类成员的私人,受保护等等。
Java接口应该使用关键字“implements”来实现; Java抽象类应该使用关键字“extends”进行扩展。
接口只能扩展另一个Java接口,抽象类可以扩展另一个Java类并实现多个Java接口。
Java类可以实现多个接口,但它只能扩展一个抽象类。

但是面试官不满意,告诉我这个描述是“bookish knowledge”。
他问我一个更实际的答复,解释when I would choose an abstract class over an interface, using practical examples
我哪里做错了?

回答:

我会先给你一个例子:

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

现在假设你的应用程序中有3个数据库。那么该数据库的每个实现都需要定义上述2种方法:

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();
}

现在在每个子类中,我们只需要实现一个方法 – 数据库依赖的方法。
我尽力而为,希望这将清除你的疑惑。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How should I have explained the difference between an Interface and an Abstract class?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

61 − 58 =