回顾:
一、final关键字
可以修饰类、函数、变量
被final修饰的类不能被继承。
继承有利有弊,它的出现对封装发生了挑战。
为什么被final关键字修饰后不能再继承?
这是因为被final关键字修饰以后,说明这是最终类,无法被子类重写,所以无法被继承
被final修饰的方法不可以被重写
但是如果,该类中不能重写特定的方法,我们其实用final修饰该方法即可,不需要再用final关键字修饰这个类。
final既可以修饰成员变量,又可以修饰局部变量。
比如final int Y = 9,这个变量无法再次更改,他的值只能为9。
final修饰以后,可以让程序更加严谨,比如Π的值只能为3.14,这个时候我们就可以用fianl对其进行修饰
二、如何实现多态?
1.向上转型
2.方法重写
3.父类引用调用这个重写方法,运行时绑定。
重写和重载的区别?
重写和重载最大的区别,在于,重写参数相同,但是重载参数类型可以不同
三、抽象类
抽象类概念
一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类,并且抽象类不能进行实例化
抽象方法
和抽象类一样都是被abstract修饰,并且抽象方法无需方法体
当多个类中出现相同功能,但是功能主体不同。
注意事项
- 抽象类当中不一定包含抽象方法,但是包含抽象方法的类一定是抽象类。
- 抽象类和抽象方法都是abstract关键字修饰的
- 抽象类当中可以定义成员变量和成员方法(且抽象方法可不包含方法体)
- 抽象类不能被实例化,只有普通类可以被实例化
- 当一个普通类继承抽象类时,普通类一定要重写抽象方法
- 抽象类存在的最大意义就是为了被继承
- 当一个抽象类A继承一个抽象类B,此时抽象类A不需要重写抽象类B中的成员。但是当一个普通类C,继承了抽象类A,就需要重写抽象类A中的抽象方法
- 抽象方法不能有方法体,否则会报错。
抽象类的特点:
抽象方法一定在抽象类中
抽象方法和抽象类都必须被abstract关键字修饰
抽象类不可以用new创建对象,因为调用抽象方法没意义(没有执行体,写了纯白给)。
抽象类中的方法要被使用,必须由子类重写其所有的抽象方法后,建立子类对象使用如果子类只重写了部分抽象方法,那么该子类还是一个抽象类。
抽象类和一般类没有太大的不同,该怎么样描述事物,就如何描述事物
四、接口
初期,可以理解为是一个特殊的抽象类。
当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表现。接口里面的成员必须是全抽象的。
接口:其实就是一个标准的规范!!可以算抽象类进一步抽象
格式特点:
1.接口种常见定义:常量,抽象方法
2.接口中的成员有固定修饰符
常量为:public static final
方法为:public abstract
接口中的成员都是public的,但是前面的public都可以省略,方法即便写成void show(),他前面默认添加public abstract void show();
问题:为什么类和类之间叫做继承,而类和接口之间叫做实现?
即便是抽象类,他也只是特定的方法是抽象的,可以在子类当中进行继承,对特定的方法进行重写就行,但是接口中的变量方法全是抽象的,都需要重新进行重写
接口不可以创建对象,这是因为里面有抽象方法。
需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以进行实例化。
接口可以实现多实现,这是因为接口类中的方法都是抽象方法,抽象方法是不能实现的,即便是几个抽象类中的抽象方法都同名的情况,也不会产生其他影响。
接口与接口之间是继承关系,同时接口直接还存在多继承
接口的特点?
接口是对外暴露的规则
接口是程序的功能扩展
接口是可以多实现
对于类的继承只是继承了类里面的一小部分内容,但是对于接口的实现,是将接口中的所有内容全部继承过去。