日期:2014-05-20  浏览次数:20586 次

private有什么奥秘吗?
class   A
{
public   A()
{
b();
}
private   void   b()
{
System.out.println( "A ");
}
}
class   A1   extends   A
{
public   A1()
{
super();
b();
}
private   void   b()
{
System.out.println( "A1 ");
}
}
class   A2
{
public   static   void   main(String   []   args)
{
A1   a1=new   A1();
}
}

class   A
{
public   A()
{
b();
}
void   b()
{
System.out.println( "A ");
}
}
class   A1   extends   A
{
public   A1()
{
super();
b();
}
void   b()
{
System.out.println( "A1 ");
}
}
class   A2
{
public   static   void   main(String   []   args)
{
A1   a1=new   A1();
}
}
的区别就在于有没有private   修饰,结果就大不一样,这是为什么啊?

------解决方案--------------------
private方法不能被继承及覆盖,因此不能构成多态。
------解决方案--------------------
private方法、属性只能在类内使用!
------解决方案--------------------
super()调用的是父类的方法

------解决方案--------------------
父类的 private成员(包括成员函数和成员变量)不能被子类继承!
------解决方案--------------------
第二个程序中,b并不是private啊。
------解决方案--------------------
private是只有类本身能够访问,其他类不能访问
不加private继承类可以访问
------解决方案--------------------
因为第二个程序里的A1继承了A,而且b()是包属性的方法,重写了父类的方法。当父类的引用指向子类时,调用的是子类的方法,即super()调用b()时由于多态调用的是A1里的b()。
在第一个程序里,b()是私有的,所以不是多态,所以super()里调用的是A里的b()。