final关键字

final在Java中用于修饰类、方法和变量,防止被继承、重写或多次赋值。final类不能有子类,final方法不能被子类重写,final变量一旦赋值后不可改变。在面试中,final常出现在对基本类型变量和引用类型变量行为的讨论中。
摘要由CSDN通过智能技术生成

有些时候,我们不想让子类覆盖重写父类中的方法或者共嗯,只能让子类去使用

那怎么办呢?

针对这个情况,java提供了一个关键字——final关键字

final关键字是最终的意思,可以修饰类,成员变量,成员方法,不能修饰构造方法

class Fu{
    public final void show(){
        System.out.println("这是父类中的show方法");
    }
}

class Zi extends Fu{
//    @Override
//    public void show() {
//        System.out.println("这是子类中的show方法");
//    }
}

public class ZiDemo {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.show();
    }
}

final关键字的特点

1.修饰类,类不能被继承

/无法从最终com.tutu.wjq.day11.Fu2进行继承
//final class Fu2{
//
//}

class Zi2 extends Fu2 {
    
}

2.修饰成员变量,变量就变成了常量,并且只能被赋值一次, 

注:自定义常量:被final修饰变量变成自定义常量

class Fu2 {
    int num = 10;
    final int num2 = 200;
}

class Zi2 extends Fu2 {
    public void show() {
        num = 100;
        System.out.println(num);
//        num2 = 200;  //无法为最终变量num2分配值
        System.out.println(num2);
    }

在构造方法完毕之前赋值即可

class Fu2 {
    int num = 10;
    final int num2;
    {
        num2 = 400;
    }

    Fu2() {
        
    }
}

class Zi2 extends Fu2 {
    public void show() {
        num = 100;
        System.out.println(num);
        System.out.println(num2);
    }

}

public class FinalDemo {
    public static void main(String[] args) {
        Zi2 zi2 = new Zi2();
        zi2.show();
    }
}
class Fu2 {
    int num = 10;
    final int num2;

    Fu2() {
        num2 = 400;
    }
}

class Zi2 extends Fu2 {
    public void show() {
        num = 100;
        System.out.println(num);
        System.out.println(num2);
    }

}

public class FinalDemo {
    public static void main(String[] args) {
        Zi2 zi2 = new Zi2();
        zi2.show();
    }
}

 3.修饰成员方法,方法不能被重写

final关键字面试题

1.在方法内部,修饰基本数据类型的变量,变量值只能赋值一次,不能发生改变

public class FinalDemo2 {
    public static void main(String[] args) {
        int x = 100;
        x=300;
        System.out.println(x);  //300

        final int y = 200;
//        y = 400;  报错,无法为最终变量y分配值
        System.out.println(y);  //200
    }
}

2.修饰引用数据类型的变量,引用的地址值不可以发生改变,但是该对象的堆内存中的值是可以发生改变的

class Student{
    int age = 10;
}

public class FinalDemo2 {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.age);  //10

        final Student s2 = new Student();  
        System.out.println(s2.age);  //10

        s2.age = 1000;
        System.out.println(s2.age);  //1000

        System.out.println("=================================");
//        s2 = new Student();  报错,无法为最终变量s2分配值
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

+7_big data

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值