本帖最后由 Elvaly 于 2012-12-14 01:52:27 编辑

解决方案 »

  1.   

    问题1:F1 f = new F2();这个其实只是类的另一种写法而已,我是这样理解的(我也是小白)
    如果没必要一般不会这样写的,一般这样写的都是那些架构师级别的人才会,具体这样写可以实现什么功能我也不知道。问题2:加入是一个接口,那么你就不是继承了,而是引入,而且接口不允许有实体,所以你就算引入了F1接口(如果你这样定义的话)它在初始化的时候也不会打印那个父类被调用的。问题3:接口是没有构造的,引入某个接口那么需要(必须)实现它的所有接口。PS:继承只能继承一个类,接口可以引入多个。
      

  2.   

    ps:那么这里完全没必要子类来给父类实例化对象啊?子类来给父类实例化对象有很多的用途,打个比方说你有一个方法 fun(参数),它可以接收String类型,Integer类型Char类型等,这时你要怎么做呢?是写下面的三个方法吗?
    fun(String str);
    fun(Integer i);
    fun(Char  c);
    还是用下面这个方法?
    fun(Object o);
    这里Object 就是String ,Integer ,Char  等的父类,传递参数时,就用子类来给父类实例化对象
    只是举个例子,我也是小白
      

  3.   

    第一个问题 没有父亲哪会有儿子,所以父类实例化是必然的,要不然变成野孩子,然后你又想把他给一个父亲,那父亲不一脚踢出去才怪(个人理解)
    第二个问题 接口里面是不会有构造函数的 
    第三个问题 接口是不能用new 接口名字直接实例化的 因为接口没有构造 只能new 实现接口的类去实例化
      

  4.   

    楼主还没有完全理解java中的多态。
    F2 f2 = new F2();
    F1 f1 = new F2();
    这2句的等于写了下边这2句
    new F2();
    new F2();
    运行结果当然一样了。
    前边的引用只是类型,类型可以是自己,也可以是父类。但是new F2();跟前边的引用是F1还是F2根本没有关系。
    教你个简单的办法,你只要看new 后边是什么,就知道创建的是什么对象了,而不要被前边的引用类型所迷惑。多态的用法有很多,一时半会也说不清楚。你代码敲到一定数量的时候自然就有自己的理解了。另外就是看看JAVA编程思想多态那部分,讲的确实挺好的,我当年来回看了3遍才看明白。
      

  5.   

     F1 f1=new F2();    不管F1 是抽象类或者接口,  F2继承或者实现F2,这句话是实例化了F2的一个实例, 但是它的类型是F1 类型, 并不是说F1 new了一个对象。好比F1 是人, F2是学生,     new出来了一个学生, 难道学生不是人么?