我曾在评论中説过所有的private方法都隐式的指定为final
今天看到一个朋友这样写,以下是那位朋友的观点:今天看帖子,看有人这样写: 
所有private方法默认是final的。 
对此,我表示怀疑。 private是表示方法可见性的,而final表示方法不能在子类中被覆写。 
所以我觉得这两个关键字之间没什么关系。 例子: 
class person { 
    private void run() { 
        System.out.println("person running"); 
    } 
} class man extends person { 
    private void run() { //子类中仍然可以写run()方法,但如果person类的run方法是final就不行了 
        System.out.println("man running"); 
    } 
} 大家说呢? 以下我想解释下
我想那位朋友把我那句话理解错了,他説的基类中final方法名run()在子类中不能被用是正确的
当是我那句话的前提这个方法是private的
代码解释如下:
class Person{
 private void f(){}
 private final void g(){}
}
class Man extends Person
 private void f(){}
 private final void g(){}
}
以上的写法是正确的,f()方法和g()方法其实没区别,所以説private方法添加final关键字没任何区别.

解决方案 »

  1.   

    你别瞎搞了.人家是为了反驳你的观点,private方法可以在子类中重写,并可以扩展可见性,
    但final方法就不可以在子类中重写.这两个虽然有些行为表现起来碰巧相似,但本质上没有
    任何关系.那个人表达的意思是,如果private隐含final,那么在子类中就不能被重写.因为final方法
    不能被子类重写.但private方法可以在子类中重写,说明private不隐含final.他写了final boid g()只是为了明说final方法子类不能重写.用来和private比较.为什么要加
    private?"他説的基类中final方法名run()在子类中不能被用是正确的 ",final方法在子类中不能调用是正确的?什么思维?
    我觉得从这些问题反映出你的水平还不足以讨论这些问题,自己先好好看书吧.
      

  2.   

    确实,private方法表示私有的,那么无论是否有final关键字,子类都不会受到父类同名方法的影响,因为子类和父类的private方法都仅局限于它们自己的类,但如果单独只有一个final关键字,那么由于final方法是不能被覆盖的,jvm会报错
      

  3.   

    2楼的那家伙也太没素质了吧,像个民工,要去学习小学语文,楼主説的是正确的,大家可以参考JAVA编程思想(我曾经看过)
      

  4.   

    楼主説的一点也没错啊,在看看这句话吧:我曾在评论中説过所有的private方法都隐式的指定为final 
    前提是private
    而那位反驳朋友説:所有private方法默认是final的,对此,我表示怀疑
    你不会就是那位反驳的吧,何况楼主也没説那位朋友坏话,你就乱骂人
      

  5.   

    import java.util.*;class Super {
    private void doIt() {
    System.out.println("Super.do();");
    } public void execute() {
    doIt();
    }
    }class Sub extends Super {
    private void doIt() {
    System.out.println("Sub.do();");
    }
    }public class Test { public static void main(String[] args) {
    Sub instance = new Sub();
    //输出Super.do();表示Sub的doIt()方法根本没有覆盖Super的doIt()方法
    instance.execute();
    }
    }