抽象类与抽象方法

面向对象编程思想实例解释:

在这里插入图片描述
Dog可以实例化一个dog对象因为狗分很多类拉布拉多、萨摩耶等,这符合面向对象的编程思想,但Animal类代表的是现实自然界的所有动物,如果利用Animal实例化一只布偶猫的话,那还要猫类做什么,所以抽象化的类不该被实例化具体的例子,这样做不符合面向对象的编程思想。
那么就要利用到抽象类这个关键字了abstract。

·抽象方法
使用abstract修饰的方法,没有方法体,只有声明。定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现。
·抽象类
使用abstract修饰的类。通过abstract方法定义规范,然后要求子类必须定义具体实现。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。

子类对于父类方法的功能得不到满足
这一点,我们可以通过方法的重写来解决,如图:
在这里插入图片描述

那么如果面对多个子类都需要重写父类方法,而因为没有提示到时我们忘写,该怎么办呢?有没有用办法让每次在忘记重写方法是报错,来提醒我们呢?
当然有,我们可以通过抽象方法来达到目的,现在Animal类中抽象shout方法,
在这里插入图片描述

然后我们可以看到,Dog类中报错显示了
在这里插入图片描述

意思是说,类“狗”必须声明为抽象的,或者在“动物”中实现抽象方法“呼()”,所以根据提示目前有两种解决办法,

  1. 将Dog类定义为抽象类
  2. 在动物中实现shout方法
    显然第一种是不可行的,因为如果将Dog定义为抽象类,那么Dog类将无法实例化(new),所以才去第二种方法。

在这里插入图片描述
这样就达到我们的目的了。

对于@Override在抽象类和抽象方法处的注意点:

在这里插入图片描述

注意:
1、如果父类不写无参构造方法,那么子类写无参构造方法就会报错。
2、如图 如果说第一个是抽象方法的话,那第二个算是吗?

答案是不是,因为第二个方法完成了“实现”这个过程,也就是说他有方法体(只是没写方法提,代表方法提为空)。
验证方法如图:
在这里插入图片描述

加上abstract报错了,显示说:抽象方法不能有主体(方法体)
3、一个抽象类中最少几个抽象方法,最多几个抽象方法
(1.最少0个:Animal被设置成抽象类后,其中一个抽象方法都没有,意义是方式被new(具体参考文章开头面向对象编程思想实例解释:)
(2.最多所有方法都是抽象的(不包括构造方法)

总结:

  1. 有抽象方法的类只能定义成抽象类
  2. 抽象类不能实例化,即不能用new来实例化抽象类。
  3. 抽象类必须有构造方法,创建子类对象的时候使用
  4. 一个抽象类至少0个抽象方法,至多(所有的方法都是抽象方法)个抽象方法
    子类必须重写父类的抽象方法,不重写就提示编译错误;或者子类也定义为抽象类
  5. override 重写 implements 实现
  6. 父类的方法是抽象的,需要子类实现;父类的方法不是抽象的,子类可以重写
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值