黑马程序员技术交流社区

标题: final 关键字的问题 [打印本页]

作者: 王宝龙    时间: 2012-9-6 14:14
标题: final 关键字的问题
本帖最后由 王宝龙 于 2012-9-9 23:29 编辑
  1. class Person//定义一个Person类
  2. {
  3. private String name;
  4. private int age;
  5. public Person(String name,int age)
  6. {
  7.   this.name=name;
  8.   this.age=age;
  9. }
  10. public void setAge(int a)
  11. {
  12.   age = a;
  13. }
  14. public void SayHello()//定义一个方法
  15. {
  16.   System.out.println("我是"+name+"我的年龄是"+age);//输出姓名和年龄
  17. }
  18. }
  19. class InputDemo
  20. {
  21. public static void main(String [] arge)
  22. {
  23.    final Person a = new Person("zhangsan",18);
  24.   a.setAge(16);
  25.   a.SayHello();
  26. }
  27. }
复制代码
final关键字究竟是
final的引用不能改变
还是final引用的对象里的变量不能改变。
很疑惑!!!!!
作者: 武庆东    时间: 2012-9-6 14:16
本帖最后由 武庆东 于 2012-9-6 14:26 编辑

final关键字声明类、属性和方法
1、使用final声明的类不能有子类
2、使用final声明的方法不能被子类覆写
3、使用final声明的变量即为常量,常量不可以修改!




作者: 孙岳    时间: 2012-9-6 14:23
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
作者: 杨卓儒    时间: 2012-9-6 14:47
final如果修饰对象,对象不是不可改变,只是 变量对对象的引用无法改变。
  1. class InputDemo
  2. {
  3. public static void main(String [] arge)
  4. {
  5.    final Person a = new Person("zhangsan",18);
  6.   a.setAge(16);
  7.   a.SayHello();
  8. }
  9. }

复制代码
假如楼主把下面直接改为 a = new Person("zhangsan",16);
就会报错,因为a对象被final修饰,变量对对象的引用无法改变。

错误为下面图:
楼主看完这个应该就可以明白了吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2