以下摘自孙鑫视频的课件:为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(overridden),可以使用final方法。 为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。 class中所有的private和static方法自然就是final。 我想问为什么"class中所有的static方法自然就是final"?求大侠赐教,在下先谢过了.
而private本来就不可见,所以一定不可变
而static只在类加载的时候载入一次,以后将不再载入了,更不用说可变了
而private本来就不可见,所以一定不可变
而static只在类加载的时候载入一次,以后将不再载入了,更不用说可变了
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方法,不然你们去试试...
重写时请加上这个 @Override
你就可以发现在编译是能不过的,
这说明父类的该方法并不能在子类重写
.....
而private则是除了包含这个成员的类外,其他任何类都无法访问这个成员,那当然就是和fianl一样的作用了。
class A {
public static f() {
System.out.println("fa");
}
}class B extends A {
public static f() {
System.out.println("fb");
}
}
这段代码是合法的。但是如果将A的f()方法声明成final,则会发生编译错误。
没返回值 也没void....
因为static方法与继承/覆盖等相关概念无关,是否是final对其行为没有任何影响。而final修饰方法主要是体现在继承/覆盖情形下的。
给static方法加final修饰符也同样没有任何意义。
private可以继承 但是 子类内访问不了 因为是 私有的只能父类自己访问