final关键字
final关键字概述
程序示例
/*
我们如果说父类的东西不想让子类去继承:
可以使用private修饰
由于继承方法中有一个现象:方法重写
所以,当方法可以被重写的时候,父类原本的方法还在,但是调用是子类重写后的方法,
如果我依旧想保留父类原本的方法,不想让子类重写,但是呢,我想让子类去用
针对于这样的情况,java提供了一个关键字:final
final: 最终的意思,不可以改变的意思。
使用格式:一般情况下,把final放在访问权限修饰的后面返回值类型的前面
常见的情况下,final不仅可以修饰成员方法,也可以修饰类,变量
*/
class Father4{
//被final修饰的成员方法,不能被子类重写。
//使用格式:把final放在访问权限修饰的后面返回值类型的前面
public final void fun(){
System.out.println("这是父类的fun方法");
}
}
class Son4 extends Father4{
// public void fun(){
// System.out.println("这是父类的fun方法");
// }
}
public class ExtendsDemo6 {
public static void main(String[] args) {
}
}
final的特点以及自定义常量:
程序示例
/*
final:最终的意思,它可以修饰变量,类,方法
特点:
1、被final所修饰的类无法被其他类所继承
2、被final所修饰的方法不能被重写,但是可以被重载
3、被final修饰的变量变成了常量,无法再重新分配值
被final修饰变量,可以在定义的时候先不赋值,只要在构造方法完毕之前赋值就可以了
常量分为:
A: 字面值常量:
10,12.34,"hello",'a',true
B: 自定义常量
其实就是被final修饰的变量。
final int a = 10;
*/
//被final所修饰的类无法被其他类所继承
//final class Fu1{
//
//}
class Fu1 {
// 被final修饰方法,子类无法被重写
public final void fun1() {
System.out.println("这是父类中的fun1方法");
}
// 被final修饰方法,可以被重载,因为这相当于两个方法
// public final void fun1(String s){
// System.out.println("这是父类中的fun1方法");
// }
}
class Zi1 extends Fu1 {
//被final修饰的变量变成了常量,无法再重新分配值,自定义常量。
final int a = 10;
// 被final修饰方法,子类无法被重写
// public void fun1(){
// System.out.println("这是父类中的fun1方法");
// }
public void fun2() {
System.out.println("a: " + a);
}
}
public class FinalDemo1 {
public static void main(String[] args) {
Zi1 zi1 = new Zi1();
zi1.fun2();//输出10
// 被final修饰的变量变成了常量,无法再重新分配值
// zi1.a = 200;
}
}
//--------------------------------------------------
/*
被final修饰变量,只要在构造方法完毕之前赋值就可以了
*/
class Fu2{
//成员变量在定义的时候可以先不赋值
int a;
//被final修饰的自定义常量在定义的时候也是可以先不赋值的
final int b;
//构造代码块
{
//只要在构造方法完毕之前赋值就可以了
b = 100;
}
Fu2(){
//只要在构造方法完毕之前赋值就可以了
// b = 30;
System.out.println(b);
}
public void fun1(){
//成员变量只要在使用之前赋值就可以了
a = 20;
System.out.println(a);
}
}
public class FinalDemo3 {
public static void main(String[] args) {
Fu2 fu2 = new Fu2();
fu2.fun1();
}
}