因为你的class B是继承于 class A,所以不会报错,这个机制在java中叫做上溯造型,你可以查看一下这方面的资料,简单的举个例子:特种汽车是普通汽车的子类,那么特种汽车肯定是汽车,所以在对象为参数的传递中,将一个子类的对象传递给一个父类的对象是安全的,不会报错

解决方案 »

  1.   


    类b继承了类a ,子类继承父类的属性方法,同时还有自已特有的属性和方法这样子叫继承啊,这样子b类也有了方法func,当然可以执行啊!你要搞清继承的意思!
      

  2.   

    kingd007(zhangbin): 
    我同意你的说法,但是不太明白既然已经定义了int型变量a,为什么在A类实例化的时候还可以用a做为名称,标识不会发生冲突吗? lqtflwg718(九五之尊) :
    你要那么多分干嘛有什么用处 ?
      

  3.   

    肯定不会有冲突的,因为只有将变量声明在所有方法之外,才会被认为是对象的成员,你的程序
    class A
    {
    void func( A a)
    {
    System.out.println(" func");
    }
    }
    class B extends A
    {
    int a;
    public static void main(String[] args)
    {
    B b=new B();
    A a=new A();
    b.a=1;
    b.func(a);
    b.func(b);
    }
    }
    中,int a 是声明在方法之外的,所以是类的对象成员,而A a=new A();的声明实在main()方法中,a属于方法的局部变量而且类型不同,所以说可以重复。但是把A a=new A();的声明放到方法以外就不行,或者在main()方法中再定义一个int a 也是不行的。