class A
{
private void fun()
{
}
};class B extends A
{
public void fun()
{
System.out.println("b");
}
public static void main(String args[])
{
A a;
a=new B();
a.fun();
}
};为什么会错呢?明明是覆盖掉了,应该为多态,调用B里的fun(),我那里理解错误了?

解决方案 »

  1.   

    A 类中的private void fun()是private的,不能覆写。只能覆写public和protected的。
      

  2.   

    覆盖只有在某方法是基类的就口一部分时才出现,如果某方法为private,她就不是基类接口的一部分.他仅是一些隐藏于类中的程序代码,只不过具有相同的名称而已.如果在导出类中以相同的明成生成一个public,protected或包访问权限方法的话,仅是生成了一个新的方法.
    结论就是只有非private方法才可以被覆盖.
      

  3.   

    class A
    {
    private void fun()
    {
    }
    };class B extends A
    {
    public void fun()
    {
    System.out.println("b");
    }
    public static void main(String args[])
    {
    A a;
    a=new B();

    }
    };这段代码编译通过,也就是说fun被覆盖了,如何解释?
      

  4.   

    根本不对的,编译通过和覆盖有啥关系,你吧A中Private改成Public才是覆盖
      

  5.   

    class A
    {
    final void fun()
    {
    }
    };class B extends A
    {
    public void fun()
    {
    System.out.println("b");
    }
    public static void main(String args[])
    {
    A a;
    a=new B();
    a.fun();
    }
    };编译时不通过
    class A
    {
    private void fun()
    {
    }
    };class B extends A
    {
    public void fun()
    {
    System.out.println("b");
    }
    public static void main(String args[])
    {
    A a;
    a=new B();
    a.fun();
    }
    };
    编译通过,因为是private是隐显的fianl为什么会出现两种结果呢?