A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨华东 中级黑马   /  2012-10-25 13:03  /  1358 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

final修饰类
final class Demo1{
   public void method(){}//此时的方法是无法被覆盖的,希望大家懂得。。。。
}

final 修饰方法

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

我的问题:这两种对方法的限制方式,哪个比较好???
各说各的理由吧。。。。。。
元芳,你对这个问题怎么看啊???

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 这背后一定有一个天大的秘密

查看全部评分

6 个回复

倒序浏览
这2种方式的话,应该分实际情况来看吧
第一种在类上+final这个类就不能被继承
第二种可以被继承
如果里面不止一个方法的话用第一种的方法岂不是要在另一个类中吧那些方法都要在写一遍

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

回复 使用道具 举报
肯定修饰方法好吧,如果光是上面的例子不考虑别的什么那没啥区别。如果以后用的过程中,还是修饰方法好点,因为一旦修饰了类就无法被继承。而修饰方法只是针对这个方法,我觉的修饰方法比修饰类要灵活吧

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1

查看全部评分

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