java基础 之 抽象类

前言

1、类是一个模板,类被继承后成为父类,继承父类的类称为子类。
2、子类可以对父类的方法进行重写,也可以直接使用父类的方法。
3、类称为继承,关键字为extend;接口为实现,关键字为implement;

抽象类

浅浅的理解下抽象类

  • 如果我们想让父类就仅仅是个模板,但是不写他们的方法,让继承的子类来实现,这时候就引入了抽象类
    (有点枯燥哈,举个例子,植物大战僵尸)
    在这里插入图片描述

  • 如上三个植物(Plants), 其属性效果是不相同的(此处为了举例理解,谢绝较真~):

    • 【样式及动作:move】启动后的样式,不多说,均不同
    • 【花费:cost】 豌豆射手:100;向日葵:50;坚果:150;均不同
    • 【恢复:recovery】豌豆射手:10s;向日葵:20s;坚果:30s;
    • 【攻击:attack】豌豆射手:20点;向日葵:10;坚果:12;

    由上可以看出,我们需要一个父类Plants,用来说明需要的属性,但是每个子类需要实现的方法体是不一样的,例如move()方法中了,豌豆射手需要自己实现左右摇晃以及嘴巴吐豌豆的动作,而向日葵则需要实现规定时间生产阳光的动作~

    每个道具实现方法都不同,于是对于Plants,就定义move()、cost()、recovery()、attack()这几个方法:
    在这里插入图片描述

    然后Plants这个领导就说了,你们每个部门要根据自己实际情况来做这几件事,具体怎么做,就要需要你们各部门结合自己的特点来了,去做吧~
    于是,Plants领导就放权了,可是豌豆射手(Pea)、向日葵(SunFlower)和坚果(Nut)又怕把任务给漏了,咋整?没事每个任务都有abstract修饰,这样继承父类Plants后没有实现的任务会有提醒~
    开干吧~

关键字:abstract

  • 被abstract修饰的类叫抽象类
  • 被abstract修饰的方法叫抽象方法
  • 变量不能被abstract修饰

抽象类 VS 普通类

  • 1、抽象类必须有abstract关键字修饰,无abstract修饰的是普通类;
  • 2、抽象类中的抽象方法可以没有实现体;普通类的方法必须有实现体;
  • 3、抽象类被继承后,抽象方法必须重写;普通类继承后方法可以不用重写;
  • 4、抽象类不可以直接实例化(实例化需要借助多态);普通类可以实例化对象

特点

  • 1、抽象类为了把相同但是不确定的方法提出来,为了以后统一使用,并可以具有多种具体实现,目的是强制子类实现

    如豌豆射手、向日葵、坚果都需要去实现四个功能。整合在一起,不用特意去记忆都有哪些方法了

  • 2、抽象方法没有方法体,使用abstract关键字修饰
    在这里插入图片描述

  • 3、抽象类可以没有抽象方法,但是抽象方法必须在抽象类中,即普通方法不能有抽象类
    在这里插入图片描述
    在这里插入图片描述

  • 4、抽象类如果被继承,则其中的抽象方法必须要重写。抽象类也可以有普通方法,普通方法不用必须重写
    在这里插入图片描述

  • 5、抽象类不能实例化,但是可以有构造器。(有构造器的目的是子类实例化会调用父类的构造器)
    在这里插入图片描述

  • 6、抽象类可以使用多态,指向其子类对象(因为子类已经实现了抽象方法)

  • 7、抽象类中final和abstract不能同时在一个方法中使用。(final是禁止重写,abstract是必须重写,冲突)

  • 8、抽象类中,private和abstract不能同时在一个方法中使用。(private修饰的方法子类不可见,无法重写;abstract需要重写,冲突)

  • 9、抽象类中,static和abstract不能同时在一个方法中使用。(static修饰的方法是类级别的,abstract修饰的方法是对象层面的)

  • 10、子类继承抽象类后,必须要重写抽象类中所有抽象的方法。如果不想实现抽象类中的所有抽象方法,那么该子类可以是抽象类
    在这里插入图片描述

思考个问题

为什么抽象类的子类需要重写父类的方法?

因为子类想new个对象出来。
(1)java的特性是面向对象,一切的目的是为了创建一个对象
(2)抽象类虽然有构造函数,但是不能实例化。
(2)抽象类中没有具体的实现方法,可以理解为一个标准。子类重写父类的方法,就可以能够满足多态性,保证了代码的灵活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值