
带有抽象修饰符的类是抽象类,抽象类不能创建实例对象. 包含抽象方法的类必须定义为抽象类,并且抽象类中的方法不必是抽象的. 抽象类中定义的抽象方法必须在具体的子类中实现,因此不能有抽象构造方法或抽象静态方法. 如类未实现抽象父类中的所有抽象方法,则也必须将子类定义为抽象类型.
接口可以说是抽象类的特例. 接口中的所有方法必须是抽象的. 接口中的方法定义默认为public abstract类型,而接口中的成员变量类型默认为public static final.
下面比较一下两者之间的语法差异:
1. 抽象类可以具有构造函数,但接口不能具有构造函数.
2. 抽象类中可以有普通成员变量,但接口中没有普通成员变量
3. 抽象类可以包含非抽象的普通方法,接口中的所有方法都必须是抽象的,并且不能有非抽象的普通方法.
4. 抽象类中抽象方法的访问类型可以是public,protected和(默认类型,尽管

在eclipse下未报告任何错误,但它不起作用),但是接口中的abstract方法只能是public类型,默认是public abstract类型.
5. 静态方法可以包含在抽象类中,但是静态方法不能包含在接口中
6. 抽象类和接口都可以包含静态成员变量. 抽象类中静态成员变量的访问类型可以是任意的,但在接口中定义的变量只能是public static final类型,默认值为public static final类型.
7. 一个类可以实现多个接口,但只能继承一个抽象类.
接下来,让我谈谈应用程序中两者的区别:
接口在系统体系结构设计方法中起着更大的作用,主要用于定义模块之间的通信协定. 抽象类在代码实现中起作用,并且可以实现代码重用. 例如,模板方法设计模式是抽象类的典型应用. 假定项目的所有Servlet类都必须使用相同的方法进行权限判断和记录访问. 记录并处理异常,然后可以定义一个抽象基类,以便所有Servlet都可以在该抽象基类的服务方法中继承该抽象基类,以完成权限判断抽象类和接口的区别,记录访问日志和处理异常代码,每个sub该类仅完成各自的业务逻辑代码抽象类和接口的区别,伪代码如下:
公共抽象类BaseServlet扩展了HttpServlet {
公共最终void服务(HttpServletRequest请求,HttpServletResponse响应)抛出IOExcetion,ServletException {
记录访问日志
执行权限判断
如果(具有权限){
尝试{
doService(request,response);
}

catch(Excetpion e){
记录异常信息
}
}
}
受保护的抽象void doService(HttpServletRequest请求,HttpServletResponse响应)引发IOExcetion,ServletException;
//请注意,访问权限被定义为受保护的,这既又严格,因为它仅用于子类

}
公共类MyServlet1扩展了BaseServlet
{
受保护的void doService(HttpServletRequest请求,HttpServletResponse响应)引发IOExcetion,ServletException
{
此Servlet仅处理的特定业务逻辑代码
}
}
父类方法中间的某些代码不确定,将其留给子类以使用模板方法设计模式.
注意: 这个问题的想法是首先一般性地解释抽象类和接口的基本概念,然后比较两者的语法细节,最后讨论两者之间的应用差异. 比较两者的语法细节的方法是从构造方法,普通成员变量和方法(包括抽象方法),静态变量和方法以及类的继承六个方面逐一比较答案. 第三篇从作者角度继承了答案,特别是最后,他用一个典型的例子来展示他深厚的技术能力.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-288673-1.html
吨位普遍大
欢迎来中国南海玩