final关键字

本文详细解释了Java中final关键字在修饰类、方法、变量和引用时的作用,包括禁止继承、防止方法重写、常量特性以及引用变量的固定引用但可修改内容的特点。
摘要由CSDN通过智能技术生成

final关键字:
1.final修饰类:被final修饰的类不能被继承,即为最终类,不允许其他类对其进行扩展。

2.final修饰方法:被final修饰的方法不能被子类重写,即为最终方法,子类无法改变该方法的实现。

3.final修饰变量:被final修饰的变量表示常量,一旦赋值后便不能再被修改;如果是基本数据类型,则数值不可改变,如果是引用类型,则引用不可改变,但对象本身是可以修改的。

1.final修饰类

package com.zsh.java;
final class Animal {
}

public class Dog extends Animal {//不能继承Animal类
}

报错
Cannot inherit from final ‘com.zsh.java.Animal’
(无法从被声明为final的’com.zsh.java.Animal’类继承)

final修饰的类不能被继承

2.final修饰成员方法

package com.zsh.java;
public class Base {
    void show(int x){
        
    }
    final void display(String msg){//final修饰的成员方法

    }
}

public class Sub extends Base{
    void show(int x){//方法覆写

    }
    void display(String msg){//方法覆写,提示编译错误

    }
}
}

报错
‘display(String)’ cannot override ‘display(String)’ in ‘com.zsh.java.Base’; overridden method is final
( display(String)’ 无法覆盖 ‘com.zsh.java.Base’ 中的 'display(String) )

final修饰的成员方法无法被覆盖

final static 数据类型 数据成员名 = 初始值; //必须进行初始化,不能修改
final 数据类型 数据成员名;               //必须在构造方法中初始化
final 数据类型 数据成员名 = 初始值;       //已经初始化,不能在修改

3.final修饰数据成员

package com.zsh.java;

public class Base {
    final int X;                                //未初始化,需要在构造方法中初始化
    final int T = 5;                           //已经初始化,不能修改
    final static int Y = 2;                    //必须初始化
    public Base(int x){
        this.X = x;                            //初始化final数据成员
        this.T = 50;                           //已经初始化,编译错误
    }
    public void show(){
        this.X = 10;                          //编译错误,不能修改
        Y = 22;                              //编译错误,不能修改
    }
}

报错:
Cannot assign a value to final variable ‘T’
Cannot assign a value to final variable ‘X’
Cannot assign a value to final variable ‘X’
(无法为最终变量’T’分配值;
无法为最终变量’X’分配值;
无法为最终变量’X’分配值)

final修饰的静态数据成员必须进行初始化,final修饰的非静态数据成员只能赋值一次。

4.3.final修饰引用变量

package com.zsh.java;
public class Room {
    //数据成员
    String number;
    String name;
    //构造方法
    public Room() {
    }

    public Room(String number, String name) {
        this.number = number;
        this.name = name;
    }
    //setter方法
    public void setName(String name) {
        this.name = name;
    }
}

package com.zsh;

import com.zsh.java.Room;

public class Demo001 {
    public static void main(String[] args) {
        final Room ROOM908 = new Room("908","孙悟空");//final修饰引用变量ROOM
        //ROOM908 = new Room("808","猪八戒");     //更改引用(地址),编译错误
        ROOM908.setName("猪八戒");                //更改内容,通过编译
    }
}

final修饰引用变量,该变量的引用不会改变,但能改变应用的内容。

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值