final关键字
今天看了Java编程思想,看到final关键字,回想了一下final关键字的用法,在此做笔记保留方便后期复习用.
Java中final关键字可以用来修饰 类 ,方法,成员变量,局部变量 接下来咱们挨个描述一下.
1.首先是修饰类
final的中文意思是 最后,最终.也就是说不能改变的,被final修饰的类有以下几个特点
类被final修饰的时候,这个类不能被继承,要注意的是final内中的所有成员和类中的方法都会被隐式的指定为final方法
代码以AndroidStudioIDE 编写.
如下代码
final class TestClass {
public TestClass(){
}
}
// Cannot inherit from final 报此类错误
public class A extends TestClass{
}
一般的开发过程中 类很少设置为final,除非有特殊要求,没有特殊要求建议不要设置成final,不利于后期的拓展
2.final修饰类中的方法
被final修饰的方法,不能在子类中覆盖.
因此父类中有被final的方法又想要子类也有同样的方法,那么只需要将父类的final方法变成 private,子类此时的方法不属于复写,而是属于子类自己的方法.
如下代码,public final的方法不允许被复写,报cannot override ‘getNumber()’ , overridden method is final 错误
public class TestClass {
public TestClass(){
}
public final void getNumber(){
}
}
class A extends TestClass{
//getNumber()' cannot override 'getNumber()' , overridden method is final
public void getNumber(){
}
}
如下代码将 getNumber()方法 由public 变成private, 编译通过,Class A 中的getNumber() 方法属于Class A
public class TestClass {
public TestClass(){
}
private final void getNumber(){
}
}
class A extends TestClass{
//getNumber()' cannot override 'getNumber()' , overridden method is final
public void getNumber(){
}
}
3.final修饰变量
被final修饰的成员变量只能被赋值一次,赋值后,不允许改变,只能为读取类型,赋值可以在声明的时候赋值,也可以在所有构造很熟内赋值不报错.
原因是被final修饰的变量,引用的地址值不能发生变化,但是当被fina修饰一个引用类的时候,不允许该引用类指向其他的对象,但是该引用所指向的对象的内容是可以变化的
如下代码, mNum 二次赋值,被会报错,而声明的时候不赋值, 所有构造很熟内赋值不报错.
public class TestClass {
private final int mNum = 666;
public TestClass(){
//不可被重新赋值
//Cannot assign a value to final variable 'mNum'
mNum = 6688;
}
}
在声明的时候不赋值
public class TestClass {
private final int mNum;
public TestClass(){
//不会报错
mNum = 6688;
}
}
fina修饰一个引用类 obj 时候,obj不允许该引用类指向其他的对象 ,报错 Cannot assign a value to final variable ‘obj’,但是 obj所指向的对象,也就是new Object() 中的内容是可以改变的
public class TestClass {
public TestClass() {
final Object obj = new Object();
// Cannot assign a value to final variable 'obj'
obj = new Object();
}
}