1、没有实现的方法是抽象方法
注意:
(1)一个方法如果没有实现的话,不需要有大括号,只需要public/private/protected+abstract+返回类型+方法名+()+“;”即可,这个与纯虚函数是类似的。
(2)含有抽象方法的类必须定义为抽象类,虽然定义为抽象类,但是可以声明为public或者private等类型,只需public/private/protected+abstract+class+类名,即可。
2、例题1:
注意:
(1)一个类如果继承于抽象类的话,一般情况下,需要实现抽象类中所有抽象方法的重写,但是如果某一个抽象方法没有重写的话,那么这个类还是抽象类,而且这个类必须在相应的位置加abstract,也就是说,如果一个类中有抽象方法或者没好完全实现抽象方法的话,这个类必须写上abstract关键字。
只要含有抽象方法或者是继承来的未被实现的抽象方法,那么这个类就是抽象类,这个类前面就必须加上abstract
(2)模板方法首先也是个方法,方法内部是不能再定义方法的(也不能再声明方法),但是方法内部是可以调用别的方法,final方面里面是调用方法,都是正常的执行语句,方法里面肯定不能声明方法了,这个final方法里面,也是调用下面的一个个方法,而不是声明,声明和调用的形式不一致,看仔细了。
上图正确,下图错误
上图正确,下图错误
(3)抽象类不能被实例化,但是抽象类中可以有构造函数。
3、上面的类题是一个模板
(1)步骤确定,但是某些方法的实现可以是不同的
final类型的,所以步骤不能改,但是局部步骤的实现可以改变
4、注意
(1)抽象类是不完整的,所以不能用new,不能新建抽象类对象比如Pet是一个抽象类,那样的话,Pet a=new Pet();
这样是错误的,因为抽象类是不完整的,没法实现创建。
思考中的编译会报错,因为abstract是用来被继承的,但是final是用来阻止被继承的,所以编译会报错。