本帖最后由 聂斌 于 2013-3-13 01:28 编辑
呵呵同学:
1..是不是如果当前变量是用final修饰的,并且没有初始化值,那么我们可以在构造方法中,对其进行赋值操作?
对象一建立就会调用与之对应的构造函数。
构造函数的作用:可以用于给对象进行初始化。也就是说当我们在堆内存中产生对象的时候这个对象他需要一个初始化动作,,就是当你创建对象时,,这个对象会做初始化动作给对象里的属性初始化,,
注意:
final 标记的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有
一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用。
lfinal标记的局部变量可以只声明不赋值,然后再进行一次性的赋值。
id是类中的成员,,所以构造函数也会给他初始化的,,如果你没有显示的指定id的值的话,,那么系统会给id加个默认的值0,,,在这里你通过构造函数给id赋值是合理的,,当id没有被final修饰时他是个变量你可以给id赋值多次,,但是flnal修饰后这个id就是常量了,,意思是id只能被赋值一次,,,,,因为被final修饰的变量是一个常量只能赋值一次,,,
看下面代码就能明白为什么常量只能赋值一次,,,,
final int id; //实例属性
Demo4(int id){
this.id=id;
}
public static void main(String[] args)
{
Demo4 d=new Demo4(100);
d.id=6; //(a) 报错
}
发现(a) 处的 id 编译错误,,,,因为你构造函数new Demo4(10);对id赋值一次后那个id就不能被第二次赋值了,,因为id是常量,只能被赋值一次,,,
第二个问题:final方法不可以被重写,但是可以被子类继承.
final方法 :
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因:
把方法锁定,防止任何继承类修改它的意义和实现。
我是这样理解的..那个show()方法他也是类中的成员,,只是他被final修饰了,,就是说这个方法定义好了之后就不能被改变了,,就好比上面的变量被final修饰后,那个变量只能被赋值一次,,,同理方法也一样的,,,区别是你上面的变量没有被你显示的初始化,,而final修饰的方法是你自己已经定义好的了,,那么这个方法被定义好之后就不能被修改了,,也就是子类不能覆盖这个方法,,同时子类具备父类的成员,,当子类继承父类的同时,子类也拿到了父类中的show方法,,只是子类不能对这个show方法做修改...
|