Java中接口和抽象类的区别说明

乔欣 Java面经 发布时间:2023-02-16 21:49:16 阅读数:942 1
下文笔者讲述java中接口和抽象类的区别说明,如下所示

接口和抽象类的简介

抽象类:
    1.使用abstract修饰符的类即为抽象类
    2.抽象类不能创建实例对象
    3.含有抽象方法的类必须定义为abstract class
    4.abstract class中,方法不必是抽象的,但是抽象方法必须在具体子类中实现
	5.子类中如果没有实现抽象父类中的所有抽象方法,则必须定义为abstract类型
    6.抽象类需要被继承才能使用
	6.由于被final修饰的类无法被继承,所以abstract和final不会同时修饰一个类

接口:
   1.接口是抽象类的一种特例
   2.接口中的所有方法都必须是抽象的(可以有一个default方法,这个方法也可包含方法的实现)
   3.接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
   4.接口可以继承接口。
   5.抽象类可以实现(implements)接口
  抽象类 接口
方法默认实现 支持 自Java8开始支持
实现 子类使用extends关键字来继承抽象类。子类如果不是抽象类,需要实现抽象类中声明的所有抽象方法 子类使用关键字implements来实现接口,需要实现接口中声明的所有方法
是否有构造函数
与正常Java类的区别 不能实例化抽象类,因为有abstract方法 接口是完全不同的类型
访问修饰符 public、protected和default 只有public
main方法 支持 不支持
多继承 继承一个类和实现多个接口 只可以继承一个或多个其它接口
速度 速度快 稍微有点慢,因为它需要时间去寻找在类中实现的方法
添加新方法 添加后可以给它提供默认的实现,故不需要改变现在的代码 自Java8开始,添加后不一定必须改变实现该接口的类,因为可以添加默认方法。

抽象类不能实例化对象的说明

 由于抽象类中可能存在未实现的方法
  所以语言设计时,定义了抽象类不能被实例化
 

使用抽象类和接口的场景

当拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
当想实现多重继承,则必须使用接口
   由于Java不支持多继承,子类不能够继承多个类
   但可以实现多个接口。因此就可以使用接口来解决它。

当基本功能在不断改变,则需要使用抽象类

抽象类和接口的区别

接口更多的是在系统架构设计方法发挥作用
    主要用于定义模块之间的通信契约
抽象类在代码实现方面发挥作用,可以实现代码的重用

如:
  模板方法设计模式是抽象类的一个典型应用
例:
所有HTTP请求都要用相同的方式
进行权限判断、访问日志记录和异常处理
此时需定义一个抽象的基类
让所有controller都继承这个抽象基类
在抽象基类的service方法中实现上述功能
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 

public abstract class BaseServlet extends HttpServlet {

  public final void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
   // 记录访问日志
   // 进行权限判断
  } 
   protected abstract void doService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;
   // 注意访问权限定义成protected,显得既专业,又严谨,因为它是专门给子类用的
} 

class MyServlet1 extends BaseServlet {
   protected void doService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
   // 本Servlet只处理的具体业务逻辑代码
   }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202302/16765553905815.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者