本帖最后由 Amo860129 于 2011-11-17 04:04:23 编辑

解决方案 »

  1.   

    不是在Application 里传了实参了么
      

  2.   

     this.plugin=p;
        p.tranferString("the String from father");
    执行到这两句了呗
      

  3.   

    典型的多态原理:根据多态性,Mainapp本质就是Plugin的子类,而Application的构造函数的参数是父类Plugin,因为你在main函数里有这么一句new Application(new Mainapp());
    即用了子类Mainapp来实例化了Application构造函数的参数,根据多态性原理可知,当执行Application构造函数中的p.tranferString("the String from father")时,此时p这个引用会在运行时指向plugin的子类Mainapp,,进而也就调用了子类Mainapp的tranferString方法。
    其实关于接口,可以完全理解为一个类,一个抽象父类,所以它也遵从多态性原理。
      

  4.   

    确实没看出问题在哪里。
    Mainapp实现了Plugin接口,属于此接口的子类。new了一个Application对象直接把Mainapp的实例传了进去,调用了Application类中带参的构造函数,构造函数中把传进来的Mainapp实例赋给了Application类的私有成员plugin,然后打印了这句话
      

  5.   

    public Application(Plugin p){
        this.plugin=p;
        p.tranferString("the String from father");
    }
    }
    这里不是调用了p.tranferString("the String from father");当然会打印啦
      

  6.   

    告诉你一个很实用的办法,你在ECLIPSE中,点击你实现类Mainapp中的方法或参数,自动会跳转到其他地方。这样你就真正了解了调用层次。
    其实就是传了参数的了。 
      

  7.   

     new Application(new Mainapp());
    你在new Mainpp的时候已经生成了一个对象
    然后传到Application里面去了,传给了Plugin,就等于是Mainpp对象向上转型了,因为你的Mainpp实现了Plugin接口
    因此你用Plugin的对象p调用的话就实际是Mainpp的对象在调用
    这就是运行时类型,也就是后期绑定,根据你不同的向上转型前的对象来调用不同的方法,这就是多态
      

  8.   

    Plugin plugin = new Mainapp(); 父类的引用指向子类的对象。多态,,,
      

  9.   

    主要就是执行了public Application(Plugin p){
        this.plugin=p;
        p.tranferString("the String from father");
    }
    就是给str赋值为"the String from father"
      

  10.   

    用spring的技术来解释这个就叫"控制反转"也叫"依赖注入", 注入有很多种,楼主所学习的是:使用构造函数进行注入。
    public static void main(String[] arc){
       new Application(new Mainapp());
    }
     new Application(new Mainapp());这时就构造了一个w Application实例
    并且实例化的时候就会调用Application中的构造函数:
    public Application(Plugin p){
        this.plugin=p;
        p.tranferString("the String from father");
    }
    这样,new Application(new Mainapp());中的new Mainapp()这个实例就传给了构造函数的参数p,
    将p再赋给plugin之后下面那行:
    p.tranferString("the String from father");
    其实下面这样写是等效的:
    this.plugin.tranferString("the String from father");用到的原理: 
    1:注入(构造注入)深入点说: 把接口的具体实现的类的实例赋给接口对象,这样接口对象就具有了具体的功能。
      

  11.   

     Deutche is schwer zu verstehen。 还是中文好,大家一讲我就理解多了。。