当前位置:编程学习 > JAVA >>

关于private是否被继承求解..

之前我曾经从网上找过这个问题,网上有两种说法,一种说法是会被继承,他们解释继承是继承子类除构造函数外的一切属性和方法,只是private被隐藏了,但是也继承了。另一种说法是不继承,private不能被继承

当时我也没能确定他是否继承..今天看Thanking in java,看到了一个问题,在类当中只要他的方法是private的,那么他就相当于是final的然后我就很费解了..

public class BTest extends A{
public static void main(String[] args){
BTest bt = new BTest();
bt.f();
}
private void f(){
System.out.println("父类的f方法");
}
}
class A{
private void f(){
System.out.println("子类的f方法");
}
}

按道理来说如果真的继承private方法的话,那么因为private是final,f()方法在父类中就不应该被重写(假设private方法可以被继承)呀..这与假设矛盾,所以private修饰的方法是不能被继承的,这样想对么?请问...希望有个明白人给仔细讲讲,谢啦... --------------------编程问答-------------------- final类不能被继承
final类中的所有方法都是隐式final方法
而声明为private的方法也是隐式的final方法
所以不能被继承 --------------------编程问答-------------------- 你百度的两种答案是一个意思, 隐藏了就是不能用了, 跟没继承到是一样的. 一但属性或者方法被private修饰了,那么表示在子类中是不可以调用的.  那么对于私有化了的属性非要在子类中用到的话, 就只能利用可以被调用的方法来get.

这个代码中的两个private, 你可以试试, 屏蔽掉BTest里面的f()方法时,会报错,说明父类A中f()并没有继承或者说继承过来但是隐身了,不能用了.   --------------------编程问答-------------------- private是老子的私有财产 儿子也不能用的 --------------------编程问答-------------------- http://blog.csdn.net/holy_phoenix/article/details/488864写的很详细 --------------------编程问答-------------------- 不能被继承 --------------------编程问答-------------------- 没事老是纠结这种蛋碎的问题干嘛?

private 只有自己可以用! --------------------编程问答--------------------   不管有没有继承,结果是一样的, 就是不能用 --------------------编程问答-------------------- 不能继承 --------------------编程问答-------------------- 反正不是方法覆盖,不过是重名了而已 --------------------编程问答-------------------- ()火龙果() 的身影无处不在。。。。 --------------------编程问答-------------------- "类当中只要他的方法是private的,那么他就相当于是final的"就像说苹果是个鸡蛋一样,这本书真能扯淡。

是否继承是个“概念”问题,概念定义不同,当然结论不同。所以很多争论是鸡同鸭讲。
按java的标准,java语言规范http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.2:
Members of a class that are declared private are not inherited by subclasses of that class.

Only members of a class that are declared protected or public are inherited by subclasses declared in a package other than the one in which the class is declared.

Constructors, static initializers, and instance initializers are not members and therefore are not inherited.

所以结论很明显了。

很多人理解的继承和java语言规范中所谓的“继承”不一样。所以结论也不一样。比如有人认为只要子类对象内存中有,就算继承(举个例子,父类中定义了private int a; 子类对象中当然会分配相应的空间,所以有人以此为证据说,private的也被“继承”了)。

理解意义即可。概念很难统一的,如国内有著作牛人说过,什么书说private的不继承就是垃圾,直接把java语言规范给鄙视了。 --------------------编程问答--------------------
引用 11 楼  的回复:
"类当中只要他的方法是private的,那么他就相当于是final的"就像说苹果是个鸡蛋一样,这本书真能扯淡。

是否继承是个“概念”问题,概念定义不同,当然结论不同。所以很多争论是鸡同鸭讲。
按java的标准,java语言规范http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.2:
Members of a……
学习了 --------------------编程问答-------------------- 私有的,不会被继承。 --------------------编程问答-------------------- 不能被继承,你自己仔细看下,可能你理解错了 --------------------编程问答-------------------- 当然不能。能基础还叫 private 吗?
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,