如题  private 方法 和 final 方法 不是都不可重写吗?  但是 TIJ 上说 private 可重写?

解决方案 »

  1.   

    private 方法是可以重写的,是重写把原来的覆盖了。因为是private的方法,它的访问权限在它本类的里面,所以继承它的类重写它的话,不会产生冲突。
    class A
    {
    private void test()
    {
    System.out.println("aa");
    }
    }class JustTest extends A
    {
    private void test()
    {
    System.out.println("bb");
    }
    public static void main(String args[])
    {
    JustTest app = new JustTest();//改成A app = new JustTest()就有问题,类型A中的test()方法不可视。
    app.test();
    }
    }
      

  2.   

    再说了,你较这个真儿干什么?你在真正的开发中77能有多少地方用这种东西啊,真是的。现在有些人搞java搞的有点中毒了
      

  3.   

    TIJ里面说的理论是重写
    其实实际感觉不到 因为private的东西 子类完全没有感觉的
    所以重写与否 不存在但是如果是final 子类就不被允许
      

  4.   

    楼主别在这里诋毁TIJ了。TIJ里有说过“private 可重写”?关于final和private,TIJ 第6章 说的很清楚了:Any private methods in a class are implicitly final. Because you can't
    access a private method, you can't override it. ...
    任何private方法都是隐性final的。因为你不能访问一个private方法,所以你不能覆盖它。TIJ 第6章 还指出:This issue can cause confusion, because if you try to override a private
    method (which is implicitly final) it seems to work, and the compiler
    doesn’t give an error message...
    这个问题会产生迷惑,因为如果你试图去覆盖一个private方法(它是隐性final的),它似乎也工作,编译器也不给出错误消息。"Overriding" can only occur if something is part of the base-class
    interface. ... If a method is private, it isn't part of the base-class interface. It
    is just some code that's hidden away inside the class, and it just happens
    to have that name, ... You haven't overridden the method, you've just created a new
    method.
    “覆盖”只会在有什么是基类接口的一部分时才发生。……如果一个方法是private的,它就不是基类接口的一部分,它只是隐藏在类里面的一些代码罢了,而碰巧也有那个名字。……你没有覆盖那个方法,你只是创建了一个新的方法。------------------------------------------------------------
    可见,private方法不能被覆盖。但是因为它可以以相同的名字存在于子类中,所以“看上去”它被“覆盖”了。从子类来看,它根本不知道父类有这个方法,而父类也不知道子类有这个方法,它们是独自存在于各自类的内部的,与接口无关。
      

  5.   

    敢问楼上给出的代码,既然JustTest中private void test()这个方法不算作重写。
    那么应该算作什么呢,是说就是JustTest重新声明了一个新的方法么。
      

  6.   

    是的,对于JustTest类来说,private void test()是一个新方法,但对其它类来说,它没有任何影响,没人管得着它。
      

  7.   

    再说了,你较这个真儿干什么?你在真正的开发中77能有多少地方用这种东西啊,真是的。现在有些人搞java搞的有点中毒了认同!!!
      

  8.   

    再说了,你较这个真儿干什么?你在真正的开发中77能有多少地方用这种东西啊,真是的。现在有些人搞java搞的有点中毒了
    --------------------------------
    不认同!书到用时方恨少,基础知识掌握的越多越好,开发中自然会有用到的时候。