今天我们接触到final关键字,抽象类和抽象方法,递归算法以及接口
一、final关键字
1.final修饰类,该类不能被继承 如:String
2.final修饰方法,该方法不能被重写
3.final修饰变量,该变量为常量。往往和static一起,因为可以直接通过类名.变量名访问。
备注:常量名全部用大写字母表示。
final修饰变量有两种初始化方式:
a.直接初始化
b.通过构造方法初始化
例: public class Demo{
final static int a = 100;
main(){
Demo d = new Demo();
syso(d.a);
}
}
二、抽象类和抽象方法
由来:因为类继承,大都要重写父类中的成员方法,导致父类中的成员方法对我们来说意义不大,还占用资源。此时有没有一种方式来解决这个问题。此时抽象类和抽象方法上场。具体的实现内容由子类继承时去重写抽象方法即可。
抽象类和抽象方法用关键字abstract表示
抽象方法:只有方法名没有方法体的方法称为抽象方法
语法:权限修饰符 abstract 返回值类型 方法名();
抽象类:有抽象方法的类一定是抽象类
子类继承抽象类的时候注意事项:
1.子类是普通类,必须重写父类中的抽象方法
2.子类也是抽象类的话,可以不重写父类的抽象方法
3.抽象类不能new
为什么需要抽象类抽象方法?
将多个类中共同的行为封装在一起,不需要写具体的实现代码,由各个类去继承这个封装好的类,然后自行实现想要的结果。
三、递归算法
一句话概括:自己调自己
古典问题:有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,加入兔子都不死,问每个月的兔子总数是多少?
程序分析:兔子的规律为数列:1,1,2,3,5,8,13,21.。。。。
代码:
int sum = 0;
public int number(int month){
if(month==1||month==2){
return sum = 1;
}
return sum=number(month-1)+number(month-2);
}
四、接口
接口是一个特殊的抽象类。
1.接口中的不能声明变量,只能声明常量
2.接口中的所有方法都是抽象方法
3.接口不能new
4.没有构造方法
5.接口可以多继承 接口与接口之间用逗号隔开
6.接口可以多实现 接口与接口之间用逗号隔开
用关键字interface来表示接口。
如何实现接口?用关键字implements去实现。
实现接口,必须重写里面的所有抽象方法
案例: 老师和学生
分析:
老师类:姓名 年龄 吃饭 睡觉
学生类:姓名 年龄 吃饭 睡觉
从具体类到抽象类:
将具有共性的功能封装在抽象类中 父类 Person类
额外的抽烟功能,不是所有的老师或同学都抽,不具体共性。
此时可以将该功能封装在一个接口中,哪个老师或学生抽烟,直接去实现该接口即可