楼主别在这里诋毁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方法不能被覆盖。但是因为它可以以相同的名字存在于子类中,所以“看上去”它被“覆盖”了。从子类来看,它根本不知道父类有这个方法,而父类也不知道子类有这个方法,它们是独自存在于各自类的内部的,与接口无关。
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();
}
}
其实实际感觉不到 因为private的东西 子类完全没有感觉的
所以重写与否 不存在但是如果是final 子类就不被允许
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方法不能被覆盖。但是因为它可以以相同的名字存在于子类中,所以“看上去”它被“覆盖”了。从子类来看,它根本不知道父类有这个方法,而父类也不知道子类有这个方法,它们是独自存在于各自类的内部的,与接口无关。
那么应该算作什么呢,是说就是JustTest重新声明了一个新的方法么。
--------------------------------
不认同!书到用时方恨少,基础知识掌握的越多越好,开发中自然会有用到的时候。