返回列表 回复 发帖

问个final方法的问题

以下摘自孙鑫视频的课件:

为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(overridden),可以使用final方法。

为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。

class中所有的private和static方法自然就是final。

我想问为什么"class中所有的static方法自然就是final"?

求大侠赐教,在下先谢过了.
final的主要目的就是 不变  不希望别人改变他们,包括他们的子类
而private本来就不可见,所以一定不可变
而static只在类加载的时候载入一次,以后将不再载入了,更不用说可变了
不过呢,static方法好象是可以被继承的,是否为final就不清楚了
final的主要目的就是 不变  不希望别人改变他们,包括他们的子类
而private本来就不可见,所以一定不可变
而static只在类加载的时候载入一次,以后将不再载入了,更不用说可变了
class中所有的private和static方法自然就是final了。
class中所有的private和static方法自然就是final。
---------------------------
这个说法是错误的,
例如:
private static int a=0;
private final static int b=0;
private void abc()
{
  a=1;//通过;
  b=1;//错误,不能通过。
}
这两个变量,是不同的,a的值可以在本类里被改变,而b的值就永远是0了。
  
引用 4 楼 yeah920 的回复:
class中所有的private和static方法自然就是final。
---------------------------
这个说法是错误的,
例如:
private static int a=0;
private final static int b=0;
private void abc()
{
a=1;//通过;
b=1;//错误,不能通过。
}
这两个变量,是不同的,a的值可以在本类里被改变,而b的值就永远是0了。


说法错误。
楼上的也太强了,基础太好了
不过人家说的是在继承中保持变量不可改变,是这个前提!!
所以说孙鑫的说法也是正确的!!
静态方法你知道吗?
static final用来修饰成员变量和成员方法,为“全局常量”
变量,表示一旦给值就不可修改,并且通过类名可以访问。
方法,表示不可覆盖,并且可以通过类名直接访问。
-----------
static :通过类名访问
final  :不可改

你问的那句话 肯能和上下文有关
返回列表