final关键字:它可以修饰成员变量,成员方法,类;不可改变的,最终的。
特点:
1、修饰类,类不能被继承
2、修饰变量,变量就变成了常量,只能被赋值一次
3、修饰方法,方法不能被重写
final修饰局部变量
1、如果修饰的变量在方法内部,该变量不可以被改变
2、final如果修饰的是引用数据类型的时候,引用的地址值不可以发生改变,但是
该引用数据类型堆内存里面的值是可以改变的,因为里面的变量没有被final修饰
final修饰变量的初始化时机,在构造方法初始化完成之前进行赋值
多态:某一个事物,在不同时刻体现出来的不同的状态
class Fu{
}
class Zi extends Fu{
}
多态的前提:(缺一不可)
1、要有继承的关系
2、要有方法的重写
如果没有重写也是可以的,但是你不重写就没有意义
3、要有父类的引用指向子类的对象
格式:(父类名 引用变量名=new 子类名())
Fu f = new Zi(); //(Fu左,Zi右 )
多态访问成员特点:
1、成员变量
编译看左边,运行看左边
2、构造方法
创建子类对象的时候,先访问父类的构造方法,先对父类的数据进行初始化
3、成员方法
编译看左边,运行看右边
因为子类的成员方法存在重写,所以运行访问的时候看右边
4、静态的成员方法:
编译看左边,运行看左边
5、静态方法随着类的加载而加载
由于被static修饰的都是与类有关系的,所以它算不上重写
编译看左边,运行访问的时候也看左边
多态的优点:提高了程序的维护性(由继承保证);提高了程序的扩展性(由多态保证)
多态中的转型:不能通过多态去访问子类特有的方法(向下转型)
1) 向上转型:Fu f = new Zi();
2) 向下转型:Zi z = (Zi) f; //向下转型的条件,必须满足的是继承关系
不能通过多态去访问父类和子类同名的方法,解:super.方法名()