【Java】浅谈final关键词

本文深入解析Java中的final关键字,涵盖其在类、方法和变量上的应用。了解final如何限制类的继承、方法的重写及变量的修改,掌握其在编程实践中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

final:

final 可以修饰类、方法、变量。当final 修饰类时,表明该类不可被继承修饰方法时,表明该方法不可被重写修饰变量时表明该变量不可被修改。

final关键字的基本用法

在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。

1、修饰类

   当用final去修饰一个类的时候,表示这个类不能被继承。

      在自己设计一个类的时候,要想好这个类将来是否会被继承,如果可以被继承,则该类不能使用fianl修饰,在这里呢,一般来说工具类我们往往都会设计成为一个fianl类。在JDK中,被设计为final类的有String、System等。

示例:

public final class Pet {
	private String name;
	private String color;
	private int leggs;
	public Pet(String name,String color,int leggs) {
		this.color=color;
		this.leggs=leggs;
		this.name=name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void getName() {
		return;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public int getLeggs() {
		return leggs;
	}
	public void setLeggs(int leggs) {
		this.leggs = leggs;
	}
	public void eat() {
		System.out.println(leggs+"条腿的"+color+"的"+name+"在吃饭");
	}
}

之后我们用test类取继承试试:

public class Cat extends Pet{
	public Cat(String name,String color,int leggs) {
		super(name,color,leggs);//报错
	}

情况如图:

即就是,final修饰的类无法被子类调用。所以,在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。

2、修饰方法

当final修饰方法时,该方法不可以被重写,但是在当前类中可以重载。

因此,如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。即父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的。

举例:

public class B extends A {

    public static void main(String[] args) {

    }

    public void getName() {
        
    }
}

public class A {

    /**
     * 因为private修饰,子类中不能继承到此方法,因此,子类中的getName方法是重新定义的、
     * 属于子类本身的方法,编译正常
     */
    private final void getName() {
        
    }

    /* 因为pblic修饰,子类可以继承到此方法,导致重写了父类的final方法,编译出错
    public final void getName() {
    
    }
    */
}

3、修饰变量

final成员变量表示常量,只能被赋值一次,赋值后值不再改变

当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;

如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。

public class Test { 
    public static void main(String[] args)  { 
        String a = "hello2";   
        final String b = "hello"; 
        String d = "hello"; 
        String c = b + 2;   
        String e = d + 2; 
        System.out.println((a == c)); 
        System.out.println((a == e)); 
    } 
}

b只能被赋值一次,因此在程序中它无法再被二次赋值

 

参考资料:https://www.cnblogs.com/xiaoxi/p/6392154.html

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值