摘要
教你如何使用final关键字,以及权限修饰符
正文
一、final关键字
final关键字代表最终、不可改变的的。
常见四种用法:
- 可以用来修饰一个类
- 还可以修饰一个方法
- 还可以用来修饰一个局部变量
- 还可以用来修饰一个成员变量
修饰类
当final关键字用来修饰一个类的时候,
格式:
1
2
3
| public final class 类名称 {
//...
}
|
含义:当前这个类,不能有任何子类,也就是太监类(继承就会报错)
注意:一个类如果是final的,那么其中的所有的成员方法都不能进行覆盖重写(因为没有儿子)
修饰方法
当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写。
格式:
1
2
3
| 修饰符 final 返回值类型 方法列表(参数列表){
//方法体
}
|
注意事项:
对于类、方法来说,abstract和final关键字不能同时使用,因为矛盾(abstract是一定要被重写的,final关键字是不能被重写的)
修饰局部变量
Student.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| public class Student {
private String name;
public Student() {
}
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
|
Main.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| public static void main(String[] args) {
int num=10;
System.out.println(num);//10
num=20;
System.out.println(num);//20
//一旦使用final来修饰局部变量,那么这个变量就不能进行更改
//一次赋值,终身不变
final int num1=10;
System.out.println(num1);//10
//num1=20;//错误写法,不能改变
//num1=10;//即使数值一样也是错误写法,只能赋值一次
final int num2;
num2=10;//这个是正确写法,只要保证赋值一次即可
System.out.println(num2);
//对于基本类型来说,不可变,指的是变量当中的值不可改变
//对于引用类型来说,不可变,指的是变量当中的地址值不可改变,但是存储的值是可以变的
Student stu1 = new Student("哈哈");
System.out.println(stu1);
System.out.println(stu1.getName());//哈哈
stu1=new Student("呵呵");
System.out.println(stu1);
System.out.println(stu1.getName());//呵呵
final Student stu2=new Student("娃哈哈");
System.out.println(stu2+stu2.getName());//地址不变+娃哈哈
// stu2=new Student("哦呵呵");//报错
// System.out.println(stu2+stu2.getName());
stu2.setName("哦呵呵");
System.out.println(stu2+stu2.getName());//地址不变+哦呵呵
}
|
修饰成员变量
对于成员变量来说,如果使用final关键字来修饰,那么这个变量也不可变
- 由于成员变量具有默认值,所以用了final之后,必须手动赋值,不然就是默认值,且无法改变
- 对于final的成员变量,要不直接赋值,要不通过构造方法赋值。二者选其一
- 必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值,如果不能用,就直接赋值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public class Person {
//方案一
//private final String name="八戒";
//方案二
private final String name;
public Person() {
this.name="八戒";
}
public Person(String name) {
this.name = name;
}
}
|
二、权限修饰符
Java中有四种权限修饰符
| public | protected | (default) | private |
|---|
| 同一个类(我自己) | Yes | Yes | Yes | Yes |
| 同一个包(我邻居) | Yes | Yes | Yes | No |
| 不同包子类(我儿子) | Yes | Yes | No | No |
| 不同包非子类(陌生人) | Yes | No | No | No |
注意事项:
(default)不是关键字,而是根本不写