之前我曾经从网上找过这个问题,网上有两种说法,一种说法是会被继承,他们解释继承是继承子类除构造函数外的一切属性和方法,只是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修饰的方法是不能被继承的,这样想对么?请问...希望有个明白人给仔细讲讲,谢啦...
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方法
而声明为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语言规范给鄙视了。