当前位置: 首页 > 面试题库 >

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

轩辕成天
2023-03-14
问题内容

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

这是我的回应:

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

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

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

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

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

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

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

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

我哪里做错了?


问题答案:

我先给你一个例子:

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

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



 类似资料:
  • 问题内容: Python中的抽象类和接口有什么区别? 问题答案: 有时您会看到以下内容: 因为Python没有(也不需要)正式的Interface协定,所以抽象和接口之间不存在Java风格的区别。如果有人努力定义一个正式的接口,它也将是一个抽象类。唯一的区别在于文档字符串中所述的意图。 当您进行鸭类输入时,抽象和接口之间的区别是令人不解的事情。 Java使用接口是因为它没有多重继承。 由于Pyth

  • 问题内容: 我不清楚两者之间的区别。 谢谢 问题答案: 它们非常相似,但是存在一些重要的技术差异: 抽象类允许您为某些方法提供默认的实现,但是接口不允许您提供任何实现。 您可以实现多个接口,但只能从一个抽象类继承。 这些差异影响应使用两种技术的方式: 您应该使用接口来 定义合同 。 抽象类对于 重用代码 很有 用 ……但是请注意,它不是重用代码的唯一方法。您还应该考虑其他方法,例如遏制。

  • 问题内容: 我接受了一次采访,面试官首先问我抽象类与所有抽象方法和接口之间的区别是什么。 我回答说,如果将来需要继承某些东西,并且已经扩展了一个类,那么您将无法做到这一点。 然后,他说,在这种情况下,您将永远不必扩展任何其他课程,而您必须执行合同。在这种情况下,最好使用抽象类或接口? 我告诉他您可以使用其中任何一个,但他并不满意。我不明白为什么-我认为这是开发人员/设计的选择。 问题答案: 表示接

  • 本文向大家介绍C#程序中抽象类和接口之间的区别,包括了C#程序中抽象类和接口之间的区别的使用技巧和注意事项,需要的朋友参考一下 众所周知,C#和Java一样,都是面向对象的程序设计,并且为诸如封装,抽象,继承和多态性等面向对象的概念提供全面支持。 与抽象相反,抽象类和接口都以图片形式出现,因为它们都在C#程序中提供了抽象。 在抽象类中,我们可以创建需要由派生类实现的功能。接口允许我们定义一个或多个

  • 理解抽象 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意。 其实,

  • 本文向大家介绍详细解析Java中抽象类和接口的区别,包括了详细解析Java中抽象类和接口的区别的使用技巧和注意事项,需要的朋友参考一下 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至