抽象类

32 篇文章 0 订阅

一、抽象类
尽量不要直接继承实现好的类,而要继承抽象类或者实现接口
普通类无法强制要求子类覆写方法,因此产生抽象类与接口。

1.抽象类的定义与使用
抽象方法:使用abstract关键字定义并且没有方法体的方法,抽象方法所在的类就是抽象类

public abstract void print();
  • 抽象类就是比普通类多了一些抽象方法(抽象方法可以有0~N个)而已(抽象类就是普通类的超集)
  • 抽象类使用abstract关键字定义
  • 因为抽象类中含有抽象方法,抽象方法没有方法体,因此抽象类不能产生实例化对象(抽象类是个半成品,无法直接使用)

没有方法体的方法不一定就是抽象方法,本地方法就是例外:
本地方法(调用C语言或者其他语言同名方法):在java中声明,在C语言中实现

public native void test();

2.抽象类使用原则

  • 所有抽象类必须有子类(abstract与final 不能同时出现,若同时出现则在编译时报错)被final修饰的类不能有子类(终结器);
  • 当抽象类的子类不是抽象类时,抽象类的子类必须覆写抽象类的所有抽象方法;
  • 抽象类可以使用子类向上转型为其实例化,抽象类一定不能直接实例化对象(无论是否有抽象方法);
  • 由于抽象类强制要求子类覆写抽象方法,因此abstract与private 不能一起使用。

3.抽象类的相关规定
3.1*抽象类也存在构造方法,并且子类也一定按照实例化流程,先调用抽象类的构造方法而后再调用子类构造方法。
3.2抽象类可以不定义任何抽象类方法,但此时仍然无法直接实例化对象
3.3

  • final与abstract 不能同时出现
  • private与abstract也不能同时出现

3.4
*
抽象类也分为外部抽象类与内部抽象类。
*
内部抽象类的抽象方法与外部抽象类的抽象方法无关。
*
当前直接继承哪个抽象类,就覆写其抽象方法(若直接继承外部抽象类,则只需覆写外部抽象类的所有抽象方法即可)

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值