面向对象-final关键字

来源:互联网 发布:iphone电视直播软件 编辑:程序博客网 时间:2024/06/10 16:31

final关键字(掌握)

(1)是最终的意思,可以修饰类,方法,变量。

(2)特点:

    A:它修饰的类,不能被继承。

    B:它修饰的方法,不能被重写。

    C:它修饰的变量,是一个常量。

(3)面试相关:

    A:局部变量

        a:基本类型 值不能发生改变

        b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的

    B:初始化时机

        a:只能初始化一次。

        b:常见的给值

            定义的时候。(推荐)

            构造方法中。

/*继承的代码体现由于继承中方法有一个现象:方法重写。所以,父类的功能,就会被子类给覆盖调。有些时候,我们不想让子类去覆盖掉父类的功能,只能让他使用。这个时候,针对这种情况,Java就提供了一个关键字:finalfinal:最终的意思。常见的是它可以修饰类,方法,变量。*/class Fu {public final void show() {System.out.println("这里是绝密资源,任何人都不能修改");}}class Zi extends Fu {// Zi中的show()无法覆盖Fu中的show()public void show() {System.out.println("这是一堆垃圾");}}class ZiDemo {public static void main(String[] args) {Zi z = new Zi();z.show();//异常}}
/*final可以修饰类,方法,变量特点:final可以修饰类,该类不能被继承。final可以修饰方法,该方法不能被重写。(覆盖,复写)final可以修饰变量,该变量不能被重新赋值。因为这个变量其实常量。常量:A:字面值常量"hello",10,trueB:自定义常量final int x = 10;*///final class Fu //报错:无法从最终Fu进行继承class Fu {public int num = 10;public final int num2 = 20;/*public final void show() {}*/}class Zi extends Fu {//报错:Zi中的show()无法覆盖Fu中的show()public void show() {num = 100;System.out.println(num);//报错:无法为最终变量num2分配值//num2 = 200;System.out.println(num2);}}class FinalDemo {public static void main(String[] args) {Zi z = new Zi();z.show();}}
面试题:final修饰局部变量的问题:
/*面试题:final修饰局部变量的问题基本类型:基本类型的值不能发生改变。引用类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的。*/class Student {int age = 10;}class FinalTest {public static void main(String[] args) {//局部变量是基本数据类型int x = 10;x = 100;System.out.println(x);//100final int y = 10;//y = 100;System.out.println(y);//报错:无法为最终变量y分配值//局部变量是引用数据类型Student s = new Student();System.out.println(s.age);//10s.age = 100;System.out.println(s.age);//100final Student ss = new Student();System.out.println(ss.age);//10ss.age = 100;System.out.println(ss.age);//100//重新分配内存空间,就是给新的地址值ss = new Student();//报错:无法为最终变量ss分配值}}

final修饰变量的初始化时机:


打印的是100


报错:无法为最终变量num2分配值,因为常量不能重新赋值

/*final修饰变量的初始化时机A:被final修饰的变量只能赋值一次。B:在构造方法完毕前。(仅仅针对非静态的常量,因为静态的早就加载了)*/class Demo {int num;final int num2;{//num2 = 10;}public Demo() {num = 100;num2 = 200;}}class FinalTest2 {public static void main(String[] args) {Demo d = new Demo();System.out.println(d.num);System.out.println(d.num2);}}

0 0
原创粉丝点击