抽象类和接口的区别

本文详细介绍了抽象类和接口在Java中的应用。抽象类使用abstract关键字,不能实例化,常作为模板模式的基础,定义部分方法供子类实现。接口则强调规范,仅包含抽象方法和静态常量,支持多继承。类可以继承一个抽象类并实现多个接口,体现了设计的灵活性。抽象类与接口的主要区别在于它们的组成成分、实现方式以及继承规则。
摘要由CSDN通过智能技术生成

抽象类和抽象方法用abstract关键字修饰

1、抽象类

1.1、抽象类和抽象方法的定义规则

  1. 抽象类和抽象方法必须使用abstract修饰符修饰,抽象方法只有方法签名,没有方法体
  2. 抽象类不能实例化,无法使用new关键字创建实例,即使抽象类里面不包括抽象方法,也不能创建实例,只能被当作父类继承
  3. 抽象类可以包含的5种成分,方法(普通方法、抽象方法)、构造器、初始化块、内部类、成员变量,构造器不能用于创建实例主要用于被子类调用
  4. 含有抽象方法的类只能被定义为抽象类

1.2 abstract和final、static

  1. 用abstract修饰的类只能被继承,修饰的方法必须由子类重写,final修饰的类不能被继承,修饰的方法不能被重写,abstract、final不能同时使用
  2. 使用static修饰一个方法时,表明这个方法属于类本身,如果将该方法定义为抽象方法,通过类调用会失败,abstract、static不能同时使用

1.3 抽象类的作用

  1. 不能创建实例,只能当成父类继承
  2. 体现了模板模式,模板模式简单规则
    • 抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给子类实现
    • 父类中可能包含需要调用其他系类的方法,这些调用方法既可以由父类实现,也可以由子类实现,父类提供一个通用算法

2、接口

接口体现的是规范和实现分离的哲学,接口通常定义一组公用方法

2.1、接口的定义

  1. 使用interface关键字
  2. 修饰符可以是public,或者采用默认的包权限访问控制符
  3. 一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类
  4. 不能包含构造器和初始化块定义,接口里可以包含成员变量(静态变量),方法(抽象实例方法、类方法或者默认方法)、内部类,所有成员必须是public修饰,
    1. 接口里定义成员变量,总是使用public static final修饰;
    2. 接口里定义普通方法,总是使用public abstract修饰,普通方法不能有实现,类方法和默认方法必须有实现

2.2、接口的继承

  1. 接口支持多继承,接口不能用于创建实例,但是可以用于声明引用类型变量
  2. 一个类可以继承一个父类,同时实现多个接口,implements部分必须放在extends部分之后

3、接口和抽象类的区别

3.1 相同点

  1. 两者都不能被实例化
  2. 两者都可以包含抽象方法,实现接口或继承抽象类的普通子类必须实现这些抽象方法

3.2 不同点

  1. 接口里只能包含方法,成员变量、内部类三种成分,并且方法只能是抽象方法或者是默认方法,不能包含普通方法,抽象类可以包含普通方法
  2. 接口里不能包含构造器,抽象类可以包含构造器,但是抽象类里的构造器不是用于创建对象,而是让其子类调用这些构造器创建子类实例
  3. 一个类只能有一个直接父类,包括抽象类,但是一个类可以实现多个接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值