黑马程序员技术交流社区

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

作者: 杨华东    时间: 2012-10-25 13:03
标题: final 关键字的 趣味
final修饰类
final class Demo1{
   public void method(){}//此时的方法是无法被覆盖的,希望大家懂得。。。。
}

final 修饰方法

class Demo2{
   final public void method(){}//此时方法也是不会被覆盖的,希望大家也懂得。。。
}

我的问题:这两种对方法的限制方式,哪个比较好???
各说各的理由吧。。。。。。
元芳,你对这个问题怎么看啊???
作者: 毛标    时间: 2012-10-25 13:09
这2种方式的话,应该分实际情况来看吧
第一种在类上+final这个类就不能被继承
第二种可以被继承
如果里面不止一个方法的话用第一种的方法岂不是要在另一个类中吧那些方法都要在写一遍
作者: 程杰    时间: 2012-10-25 13:13
肯定修饰方法好吧,如果光是上面的例子不考虑别的什么那没啥区别。如果以后用的过程中,还是修饰方法好点,因为一旦修饰了类就无法被继承。而修饰方法只是针对这个方法,我觉的修饰方法比修饰类要灵活吧
作者: 给生活加点料    时间: 2012-10-25 13:40
final修饰类,这个类不可以被继承。
而修饰方法的话是可以被继续的,只不过要想用此方法需要重写。但如果这个类还有其他方法是可以继续使用的。
这俩种final用法要因时而用。
作者: up_    时间: 2012-10-25 13:46
这个要看你的需求了,并不存在哪种方法更好,
如果你的要求仅仅是你所定义的方法不被覆盖,那么就把final定义在方法上。
但是这个类是不影响你调用的。只是涉及到继承时,无法被重写。
如果是你的需求是类不被继承,那就加载类上。

作者: 鲁中需    时间: 2012-10-25 13:50
同意2楼说的,应该视情况而定。
1.final类。
JDK中就有不少这样的类,一般比较基本的类型或防止扩展类无意间破坏原来方法的实现的类型都应该是final的,在jdk中System,String,StringBuffer等都是基本类型。
2.final方法。
1.说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用
2.第二就是允许编译器将所有对此方法的调用转化为inline调用的机制,它会使你在调用final方法时,直接将方法主体插入到调用处,而不是进行例行的方法调用,例如保存断点,压栈等,这样可能会使你的程序效率有所提高,然而当你的方法主体非常庞大时,或你在多处调用此方法,那么你的调用主体代码便会迅速膨胀,可能反而会影响效率,所以你要慎用final进行方法定义。
作者: 范贞亮    时间: 2012-10-25 14:50
首先 , 不能简单的说哪个好 , 那个就不好, Java 的设计者这样设计肯定是 有必要的 ,它们的应用场景不同。
修饰类:不允许被继承
修饰方法:不允许被重写
当然显然第二个是在第一个的范围内了 , 如果无法被继承, 明显就不涉及重写的问题, 但是类中除了方法之外, 还有成员变量的 ,同学




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