本文主要是介绍抽象类、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方法连个方法体都没有,调个什么意义呢。
这篇关于抽象类、abstract关键字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!