class A
{
void fn1()
{
}
}abstract class B
{
abstract void fn2();
}class C extends A
{
B getB()
{
return new B()
{
public void fn2()
{
}
};
}
}class Shu
{
static void method1(A a)
{
a.fn1();
}
static void method2(B b)
{
b.fn2();
}
public static void main(String[] args)
{
C c=new C();
method1(c);
method2(c.getB());
}
}
上边这个例子我基本都理解继承啊,抽象类啊,还有B getB()方法里的匿名类,我都明白,问题是我咋就不明白main方里里的method1(c),这给穿过去的是一个类吗? 然后返回一个类的实例?是这样的吗?我不太确定,请大师帮我解决疑问请用通俗的话语解释,在帮我拓展点知识那就最好了(PS:拒绝老鸭回答,老鸭请认真看书,早日找到工作)!!!!!!!!!
祝福老鸭学业有成!

解决方案 »

  1.   

    首先你要知道一点,C是A的子类。在main方法中的method1(c),传递的是一个对象的引用。这里你方法的参数类型为A,而传的是C的对象引用,其实这就涉及到多态了,这是可以的。然后,这个方法是不会返回一个类的实例的,因为method1()方法调用的是A类的方法fn1(),返回类型为空,即void类型,而且这个方法的方法体是空的,所以,自然不会返回一个类的实例了。
      

  2.   

    method1(c);传进去一个类C的对象c,调用方法
    static void method1(A a)
        {
            a.fn1();
        }
    c向上转型为类A的对象(因为C是A的子类),执行类A中的方法
    void fn1()
        {
        }
      

  3.   

     public static void main(String[] args)
        {
            C c=new C();//这里创建了类C的一个对象 c是一个对象
             //传进去一个对象
            method1(c);
            method2(c.getB());
        }
    class C extends A
     类C继承A  C  instanceof  A   这里将C传进去  思想中穿插着多态   你看看多态的  没有返回类的实例只是  一个类的对象调用了这个对象的方法
      

  4.   

    在main中所使用的方法就是你在类中所定义的方法,这个方法你是怎么定义的就怎么使用。(怎么感觉像说废话的)方法的定义就包括方法名与方法体。如你的method1方法
    static void method1(A a)  //这是方法名部分
    {
       a.fn1();                    //俩{} 括起来的就是方法体
    }
    方法名部分就包括了这些内容:  访问权限 + [修饰符] + 返回类型 + 方法名 + (方法的参数)
    访问权限就包括了public private protect 以及default(也就是啥也不写的时候)
    修饰符:final,static,sysnchorized,native,....
    返回类型:void (啥也不返回) ,基本数据类型(8个),引用类型(也就是类)
    方法的参数列表:可以为空(啥也不传进去),也可以是基本数据类型或者引用类型,在定义参数列表的时候要指明参数的类型和参数的名字,只有包括了这两样它才能识别,传进去后就交给了方法体内部处理了。
    处理有结果要返回就返回一个结果给方法体外的接收者,如果没有需要返回的就啥也不返回。在本例你定义的方法中,你定义的参数为(A a) 也就是类型为A 名字为a的一个参数。传入到方法体后叫a执行了fn1()的方法,仅此而已.因为你定义的该方法为void ,也就是啥也不返回。也没有需要返回的。所以在正在使用该方法时也只需要传入一个按它规定的A类型的实参就可以了。
    正如你的代码: C c=new C();
     method1(c);