java面向对象15_final关键字

1.final的概念

继承的出现提高了代码的复用性,并方便开发。但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写。可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,那怎么解决呢?

要解决上述的这些问题,需要使用到一个关键字 final,final 的意思为最终,不可变。final 是个修饰符,它可以用来修饰类、类中的属性和方法和局部变量,但是不能修饰构造方法。

2.final的特点

  1. final 修饰类不可以被继承,但是可以继承其它类。
class AA {}
final class BB extends AA {} // final修饰类可以继承其他类
class CC extends BB {} // 编译错误,final修饰类不可以被继承
  1. final 修饰的方法不可以被覆盖,但子类的方法可以用final修饰。
class AA {
	final public void show1() {}
	void public show2() {}
}
class BB extends AA {
	final public void show1() {} // 编译错误,final修饰的方法不可以被覆盖
	final public void show2() {} // 父类中没有被final修饰方法,子类覆盖后可以加final
}
  1. final 修饰的变量称为常量,这些变量只能赋值一次。

    final修饰成员变量和静态变量,必须显示的设置初始值,JVM不会设置默认值

    常量命名规则:多个有意义的单词连接,所有字符大写,单词之间用下划线分割。

public class FinalDemo {
	// 成员变量必须显示的设置初始值,JVM不会不会设置默认值。
	final String USER_NAME = "xiaoming";
	public static void main(String[] args) {
		// 多个有意义的单词连接,所有字符大写,单词之间用下划线分割.
		final int MAX_VALUE = Integer.MAX_VALUE; 
		// 编译错误,final 修饰的变量称为常量,这些变量只能赋值一次。
		MAX_VALUE = 120;
	}
}
  1. final修饰的引用数据类型变量,变量中的地址不能改变,但是指向堆中对象的属性可以修改。
class Person {
	String name = "小明";
}
public class FinalDemo {
	public static void main(String[] args) {
		final Person p = new Person();
		p = new FinalDemo(); // 编译错误,地址值不能更改
		p.name = "小花"; // 地址内的对象属性值可以修改
	}
}

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

发布了55 篇原创文章 · 获赞 0 · 访问量 793

猜你喜欢

转载自blog.csdn.net/zhoujunfeng121/article/details/104600434