面试 final 修饰对象

今天面试中面试老师出了一道题目,说是final 修饰的对象能不能改变。当时确我确实没用final 修饰过对象的经历,虽然答案很明显但是我还是说没用过,只能上级调试下才知道,现在给出答案:

 1 public class finalObject {
 2 
 3     final static person p = new person("A",3);
 4     public static void main(String[] args) {
 5         p.setAge(8);
 6         System.out.println(p);
 7         //person p1 = new person("B",0);
 8         //p = p1;
 9     }
10 
11 }
12 
13 class person{//person中设置属性name ,age ,并生成get ,set 方法,重写Tostring方法
14     String name ;
15     int age ;
16     
17     public person(String name, int age) {
18         super();
19         this.name = name;
20         this.age = age;
21     }
22     
23     public String getName() {
24         return name;
25     }
26     public void setName(String name) {
27         this.name = name;
28     }
29     public int getAge() {
30         return age;
31     }
32     public void setAge(int age) {
33         this.age = age;
34     }
35     
36     @Override
37     public String toString() {
38         return this.name + ", " + this.age;
39     }
40     
41 }

输出结果:A,8

 

从以上小实验中可以看出final修饰的对象内容是可以改变的,但是引用时不能内改变的,如果执行注释到的内容,将新生成的p1对象赋值给p的话就会报错。

现在来验证其他的说法:

1.当类中的方法使用final修饰时整个类中的所有方法都会变成final的,子类中不能重写这些方法

2.当final修饰类是该类就不能被继承了。

1中答案如下。只有final修饰的方法不能被重写,并不是所有的方法变final!

 1 class person{
 2     
 3     public final void print(){
 4         System.out.println("fianl_print");
 5     }
 6     
 7     public void print2(){
 8         System.out.println("no_fianl_print");
 9     }
10 }
11 
12 class student extends person{
13     @Override
14     public void print(){
15         System.out.println("override");
16     }
17     
18     public void print2(String str){
19         System.out.println(str);
20     }
21 }

 在@override 这一行会编译错误,应为重写了final方法。截图不好截

2.放person用final修饰时student类就继承不了他了

如果面试的外企的话一定好先事先准备好一段英语的组我介绍,好好做完睡之前又准备不然糗大了。

面试之前最好预先想好你接下来要说什么,有个准备,可以在说话的时候适当的引导下话题的走向,就算老师没按照你的思路走你也可以在老师说话完了之后开一个话题,把他引导到你想好的台词山个,这样才不会太被动。希望这次能过。。。。

posted @ 2013-04-26 14:30  拙急鸟  阅读(1805)  评论(0编辑  收藏  举报