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 修饰,结果就大不一样,这是为什么啊?

解决方案 »

  1.   

    private方法不能被继承及覆盖,因此不能构成多态。
      

  2.   

    private方法、属性只能在类内使用!
      

  3.   

    哦谢谢啊,那能给解释一下,第二个程序里的super()为什么调用的是A1里的b()呢?
      

  4.   

    super()调用的是父类的方法
      

  5.   

    父类的 private成员(包括成员函数和成员变量)不能被子类继承!
      

  6.   

    第二个程序中,b并不是private啊。
      

  7.   

    private是只有类本身能够访问,其他类不能访问
    不加private继承类可以访问
      

  8.   

    因为第二个程序里的A1继承了A,而且b()是包属性的方法,重写了父类的方法。当父类的引用指向子类时,调用的是子类的方法,即super()调用b()时由于多态调用的是A1里的b()。
    在第一个程序里,b()是私有的,所以不是多态,所以super()里调用的是A里的b()。