当前页面: 开发资料首页 → J2SE 专题 → private 方法 和 final 方法 在继承中的区别! 老鸟进!!!!!
private 方法 和 final 方法 在继承中的区别! 老鸟进!!!!!
摘要: private 方法 和 final 方法 在继承中的区别! 老鸟进!!!!!
如题 private 方法 和 final 方法 不是都不可重写吗?
但是 TIJ 上说 private 可重写?
没有可比性啊
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();
}
}
晕,还有人问这种问题?
再说了,你较这个真儿干什么?
你在真正的开发中77能有多少地方用这种东西啊,真是的。
现在有些人搞java搞的有点中毒了
子类无法调用父类private元素
TIJ里面说的理论是重写
其实实际感觉不到 因为private的东西 子类完全没有感觉的
所以重写与否 不存在
但是如果是final 子类就不被允许
楼主别在这里诋毁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方法不能被覆盖。但是因为它可以以相同的名字存在于子类中,所以“看上去”它被“覆盖”了。从子类来看,它根本不知道父类有这个方法,而父类也不知道子类有这个方法,它们是独自存在于各自类的内部的,与接口无关。
敢问楼上给出的代码,既然JustTest中private void test()这个方法不算作重写。
那么应该算作什么呢,是说就是JustTest重新声明了一个新的方法么。
是的,对于JustTest类来说,private void test()是一个新方法,但对其它类来说,它没有任何影响,没人管得着它。
再说了,你较这个真儿干什么?
你在真正的开发中77能有多少地方用这种东西啊,真是的。
现在有些人搞java搞的有点中毒了
认同!!!
再说了,你较这个真儿干什么?
你在真正的开发中77能有多少地方用这种东西啊,真是的。
现在有些人搞java搞的有点中毒了
--------------------------------
不认同!书到用时方恨少,基础知识掌握的越多越好,开发中自然会有用到的时候。
final可以继承???不会吧..