不知道标题说的方式对不对,就是:
如:
   class MyRunnable implements Runnable{...}
   Runnable r = new MyRunnable();    //这个的好处估计是用r构造线程:new Thread(r)还有:
   class Circle extends Shape{...}//Shape可以是抽象类,有很多形状子类
   Shape myShape = new Circle();
//这个的好处就很模糊了。说是客户端不需要知道具体是什么形状,但主方还是用了new Circle()构造方法,也就是还是需要知道它的具体形状。就是不明白这样做带来的好处我能想到的好处就是其他方法可以用父类的对象作为参数使用,而不用去管这个参数的具体构造
还有其他的么。。还有有些对象不是用构造方法构造,或说这个类里面没有public的构造方法,而是用get...()的方法,这样有用什么好处?????也就这么点分啊,希望得到想要的结果

解决方案 »

  1.   

    那天想使用新的 XRunnable,只需修改 new MyRunnable 为new XRunnable
      

  2.   

    我想,这样几点吧,
    1、左边的变量是外部代码定义的(如,方法参数、数组元素、约定接口)等情况下,将子类对象赋值给父类对象是合法的。总不能将别的家族的对象赋值进去吧。
    2、为赋值以后的代码增加通用性,若并不需要具体到子类类型,或不能具体到子类类型。工厂方法啊,防止别人以直接new的方式创建对象,而必须按照get...方法中约定的处理方式来创建对象。可以加些安全控制、单根控制、池控制等控制逻辑嘛
      

  3.   

    think in java对这个说得很清楚,建议看看第4版。
      

  4.   

    一方面也是为了操作方便和逻辑上的准确吧,比如Manager是Empolyee的子类,程序中有地方需要显示雇员和经理的薪水,因为经理也算是雇员,这时候只要一次将所有Manager和Empolyee对赋给一个父类Employee对象就能方便调用