抽象类、abstract关键字

引入

如前面的动物类、猫类、狗类。说动物,但是不知道说的是什么动物。只有看到了具体的动物,才知道这是什么动物。所以说,动物本身不是一个具体的事物,而是一个抽象的事物。只有真正的猫、狗是具体的动物。
不同的动物的吃的东西是不一样的,所以,我们不应该在动物类给出具体的方法体现,而是给一个方法声明即可。
在Java中,一个没有方法体的方法应该定义为抽象方法(连{}都没有的,这叫空方法体。),而类中如果有抽象的功能(抽象方法),该类必须定义为抽象类

抽象类的特点

1、抽象类和抽象方法必须用abstract关键字修饰。
2、抽象类中可以没有抽象方法,但出现抽象方法就必须把所在类定义为抽象类。
3、抽象类不能实例化。因为它不是具体的。但是抽象类有构造方法,用于子类访问父类数据的初始化。
4、如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法(重写)。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
5、抽象类的成员方法特性:1)抽象方法:是强制要求子类做的事(一般,子类去重写,完成这件事);2)非抽象方法:是子类继承的事情,提高代码的复用性。

抽象类的实例化其实是靠具体的子类实现的。是多态的方式。

Animal a= new Animal();//报错。不能new Animal()
但可以Animal a= new Cat();

小问题

1、一个类如果没有抽象方法,能不能定义为抽象类?如果能,有什么意义?
能。意义是:不让创建对象。

2、抽象类有构造方法,但不能实例化,那么构造方法有什么用?
用于子类访问父类数据的初始化。

3、abstract不能和哪些关键字共存?

  • private 冲突。 因为方法被私有了,将无法再重写。失去了抽象方法的意义。
  • final 冲突。 因为final最终了,就失去存在抽象方法的意义了。
  • static 无意义。 因为静态一般是让类直接调方法,abstrct方法连个方法体都没有,调个什么意义呢。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值