java_面向对象_final关键字_10

  • final关键字的起源
由于继承中的方法有一个现象叫做方法重写,也就是子类会把父类的某些功能给覆盖掉。但是有些时候,可能是处于安全的考虑,我们不想让子类去覆盖父类的功能只能让他使用,针对这种情况java提供了一个关键字final。
final是最终的意思,可以修饰 类,方法,变量。
  • final关键字的特点
1.final可以修饰类,该类不能被继承。
2.final可以修饰方法,该方法不能被重写。(覆盖,复写)
3.final可以修饰变量,该变量不能被重新赋值。因为这个变量其实常量。
	
	//常量:
		A:字面值常量  "hello",10,true
	    B:自定义常量  final int x = 10;

final修饰局部变量的问题
		基本类型:基本类型的值不能发生改变。
		引用类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的。
  • 子类不能重写父类成员变量问题
class Fu {
	public int num = 10;
	public final int num2 = 20;
}

class Zi extends Fu {
	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修饰成员变量
    局部变量是基本数据类型
    在这里插入图片描述
    局部变量是引用数据类型
    引用数据类型被final修改,依旧可以重新赋值,但是不能重新分配内存。
    在这里插入图片描述
  • final修饰成员方法
    在这里插入图片描述
  • 变量初始化时机问题
/*
	final修饰变量的初始化时机
		A:被final修饰的变量只能赋值一次。
		B:在构造方法完毕前。(非静态的常量)
*/
class Demo {
	//int num = 10;
	//final int num2 = 20;
	
	int num;
	final int num2;
	
	{
		//num2 = 10;
	}
	
	public Demo() {
		num = 100;
		//无法为最终变量num2分配值
		num2 = 200;
	}
}

class FinalTest2 {
	public static void main(String[] args) {
		Demo d = new Demo();
		System.out.println(d.num);
		System.out.println(d.num2);
	}
}
发布了80 篇原创文章 · 获赞 0 · 访问量 1741

猜你喜欢

转载自blog.csdn.net/weixin_41272269/article/details/103645253