站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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可以继承???不会吧..


↑返回目录
前一篇: [100分] 关于Java Socket的收取一个完整的数据包的问题.
后一篇: java 中如何存取和操作10亿这么大的数? 老鸟进。