Java的抽象类和接口


【抽象类】

成员变量(无要求,可以有private)

  • 和普通类一样,没有特殊的要求
  • 也就是说可以有private的成员变量,不能被子类直接访问
    那么子类想访问抽象类的私有成员变量并赋值时,只能通过两种办法:一个是通过公有的get/set方法,另一个就是通过调用父类构造方法super()来实现私有变量的初始化。

构造方法(一定有)

  • 虽然自带无参构造方法,但是自己无法new对象
  • 子类new对象的时候,子类构造器第一行默认调用super(),即使父类是抽象类
  • 作用:当需要给通用的变量初始化赋值时,子类可以通过super()调用抽象类无参构造来实现

成员方法(抽象类可以没有抽象方法,但反过来不行)

  • 如果有类中有抽象方法,那么这个类必须定义为抽象类
  • 但是定义一个抽象类的时候,里面可以不放抽象方法
  • 抽象方法不能用private,static,final修饰

abstract修饰符(不能与private,static,final一起使用)

  • private修饰的方法不能被子类访问,但是抽象方法还需要子类重写,互相矛盾
  • static修饰的方法可以通过类直接调用,但是抽象方法没有实体,调用也没有任何作用
  • final修饰的方法不能重写,但是抽象方法必须要重写,互相矛盾


【接口】

成员变量(只能是常量)

  • 必须是public static final

构造方法(没有)

  • 也不能自定义构造方法,否则编译出错

成员方法(java8支持default,java9支持private)

  • 默认public abstract 修饰,但是可以省略,注意没有写方法体的花括号{}
    例如:public abstract void show(); 或是 void show();

  • java8之后可以有默认方法default,注意一定要有方法体{}
    例如:default void show() {方法体}
    作用:实现类可以直接调用,或是重写后调用

  • java9之后可以有私有方法,注意一定要有方法体{}
    例如:private void show() {方法体}
    作用:接口中对外暴露的方法,就是default方法需要一些接口内部处理的时候,可以考虑接口私有方法


【区别】

  • 接口不能有构造方法,抽象类可以有
  • 在接口中凡是变量必须是public static final,而在抽象类中没有要求
  • 接口可以被多实现,而抽象类只能被单继承
  • 接口可以继承多个接口,而抽象类只能继承单个类

参考文章
https://www.liangzl.com/get-article-detail-9892.html
https://blog.csdn.net/YuanMxy/article/details/74389953
https://blog.csdn.net/JW614718/article/details/88410215

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值