final
final关键字是最终的意思,可以修饰 类、成员变量、成员方法
修饰类,类不能被继承
修饰变量,变量就变成了常量,只能被赋值一次
修饰方法,方法不能被重写
在构造方法初始化完成之前赋值完毕(修饰的是非静态的常量)
常量:
字面值常量:
“java”、100、false
自定义常量:
修饰变量,变量就变成了常量
final int x = 100;//此刻的x就是一个常量
final变量的引入:
由于继承中有一个现象,子类的方法和父类的方法声明一样,出现重写现象,所以,父类的功能就会被子类覆盖。但有时候,我们不想让子类覆盖父类的方法或者功能,只能让子类使用,这个时候,针对这种情况,Java就提供了一个关键字:final
example:子类无法重写父类中被final修饰的方法
example2:final修饰的变量不能被修改
- 面试题:final修饰局部变量
1、在方法内部,该变量不能被改变
2、final修饰引用数据类型的时候,引用的地址值不能发生改变,但是,该对象的堆内存里面的值是可以改变的
多态
多态概述:某一个事物,在不同时刻表现出来的不同状态
举例:
水:
固态、液态、气态
固态的水是水、液态的水是水、气态的水是水
水果:
苹果、香蕉、西瓜
苹果是水果、香蕉是水果、西瓜是水果
但不能说水果是苹果、水果是香蕉
我们通过观察这些例子发现,要想有多态,必须要有继承,继承是多态的前提
多态的条件:
要有继承的关系
要有方法的重写
其实没有也可以,但是没有重写就没有意义
要有父类引用指向子类对象
父 f = new 子();
多态中成员访问特点
成员变量
编译看左边,运行看左边
构造方法
创建子类对象的时候,先访问父类的构造方法,对父类的数据先进行初始化
成员方法
编译看左边,运行看右边
因为成员方法存在重写,所以访问看右边
静态成员方法
编译看左边,运行看左边
由于被static修饰的都是与类相关的,算不上重写,所以,运行的时候,访问的还是左边的
example:
- 多态的好处
1、提高了代码的维护性(这是继承保证的)
2、提高了程序的扩展性(这是多态决定的) - 多态的弊端
不能访问子类的特有功能
正是因为不能访问子类中的特有功能,所以在多态中有了一个全新的概念:向下转型。
多态中转型的使用:
向上转型:Fu5 f = new Zi5();
向下转型:Zi5 z = (Zi5) f2;
注意:这样的转型,必须要求f2必须是能够转换成z的,也就是说,他俩必须要是继承关系。
内存结构图如下所示
但是要注意一点的就是,多态转型中有一种异常,如下所示
感谢观看,我是酷酷的涛。请点个收藏和关注。谢谢。