Final关键字
final:表示最终的,最后的,主要用来修饰类、函数和变量;
final 修饰变量
表示这个变量的值不能被修改;
因为被final修饰的变量的值不可改变,所以java中都使用它表示常量;
如果是常量,变量名的写法是:所有字母全部大写,多个单词之间使用下划线连接;
final 修饰类****
直接写在class关键字前面,表示这个类不能被继承;
final 修饰函数****
直接写在函数的返回值类型前面,表示这个函数不能被重写,但是可以被继承;
abstract关键字
案例:创建类描述猫和狗的行为;
猫的行为:抓老鼠;吃鱼;
狗的行为:看家;吃骨头;
分析:这个需求有两类事物,需要创建两个类来分别描述它们;
创建描述猫的类:
问题:上面两个类中有相同的方法
为了提高代码的复用性,需要将其抽取到共同的父类中;猫和狗都是动物,所以可以创建一个动物类,让猫和狗都继承它:
问题:在抽取共同方法到父类中的过程中发现,不同子类虽然具有相同的方法,但是不同子类的实现不同,在父类中无法准确描述;
像这种在父类中不能准确描述、需要子类去实现的方法,就应该定义为抽象方法;
抽象方法的书写格式:
A:抽象函数没有方法体,连大括号都没有;
B:抽象函数使用关键字abstract修饰,关键字写在函数的返回值类型前面;
抽象函数表示的是描述不清的功能;如果一个类中有了抽象函数,说明这个类表示的事物也是描述不清的,需要定义为抽象的类;
抽象类的书写格式:
直接将abstract关键字写在class关键字前面;
抽象类特点
1、抽象类不能实例化;
2、抽象类中的抽象函数必须由子类去实现,否则子类也是抽象类;
3、抽象类也是一个类,类中可以书写所有成员,也可以没有抽象函数;
4、因为抽象函数必须由子类实现,所以不参与继承的(private)和不能被子类重写的(final)关键字不能和abstract共存;
5、因为静态函数不需要类的对象就可以直接使用,所以static关键字也不能和abstract共存;
6、如果一个类不希望被实例化,但又希望被子类继承,就可以定义为抽象的,即使类中没有抽象函数;
普通类与抽象类的区别
1、普通类可以创建对象,抽象类不可以创建对象
2、普通类可以包含普通方法但是不能包含抽象方法,而抽象类既可以包含普通方法又可以包含抽象方法
3、抽象类中抽象方法不能使用private修饰,而普通类中方法可以使用private修饰