日期:2014-05-20  浏览次数:20664 次

Java的内部类实现多继承只是个噱头?
不好意思兄弟我只能用这个标题啦。。。
内部类号称实现多继承,弄得好像只有用内部类才能实现多继承似的,实际上呢?
我修改了下这个页面给的例子如下:(http://blog.csdn.net/BossDarcy/article/details/7066226)

class Consumer {  
    protected float buyPrice;  
    protected  void  buyGoods(){};  
}
class Producer {  
    protected  float cost;  
    protected  void produce(){};  
}  
/** 
 *Java实现“多继承” 
 *@author androidyue 
 *Last Modified:2011-12-13    上午11:00:25 
 */  
public class InnerClassDemo extends Producer {  
    public ConsumerBuyer buyer;  
      
    public void desribeMySelf(){  
        System.out.println("使用Java模拟多继承");  
        this.produce();  
        this.buyer=new ConsumerBuyer();  
        this.buyer.buyGoods();             
    } 
    
    public Consumer getConsumer(){
     return buyer;
    }
      
    @Override  
    protected void produce() {  
        this.cost=100f;  
        System.out.println("我是生产者,我以每件"+this.cost+"RMB的成本生产一件产品,然后以20000元价格对外出售");  
    }  
      
    class ConsumerBuyer extends Consumer{        
        @Override  
        protected void buyGoods() {  
            this.buyPrice=0f;  
            System.out.println("我是消费者,我以"+this.buyPrice+"RMB 买了一件售价20000元的商品,不信吧,因为我也是生产者!^_^");                 
        }             
    }  
    
    public static void main(String[] args){  
        InnerClassDemo demo=new InnerClassDemo();  
        demo.desribeMySelf();  
        System.out.println("demo instanceof Consumer: " + (demo.getConsumer() instanceof Consumer));
        System.out.println("demo instanceof Producer: " + (demo instanceof Producer));
    }  
  
}  

不得不承认内部类可以随意取用外围类资源这点(包括private)很有优势,但是若只是光是取用资源方便并不能使它成为唯一的实现方式,只要多用getter, setter不就行了?
疑问在于,内部类口口声声说的多继承,看起来也不过就是组合嘛?!外围类需要用到内部类,也必须先新建其对象,然后该干嘛干嘛。
就好像最后打印的两行:demo.getConsumer() instanceof Consumer),demo instanceof Producer)
如果换成(demo.getConsumer() instanceof Producer)无疑会出错,也就是说内部类对象也仅仅是自己实现的那个接口或者继承的类类型,它并不是外围类类型,只是它可以随意取用外围类的资源使得它似乎就是外围类类型——这是我的看法。。。。请各位高手指点下,内部类是不是伪多继承?除了取用外部类资源便利和封装,它还有其它优势吗?
------解决方案--------------------
首选是组合吧,还有内部的本身就是一个单独的类,只是构造的时候其他的类有区别。内部类是实现多继承的一种方式,但是不是最好的方式,多继承的话首选是接口的方式,实在不行才用内部类。
------解决方案--------------------
java本来就不支持多继承,内部类是作为外部类的一部分,能使用外部类的东西,没啥NB的。
------解决方案--------------------
引用:
Quote: 引用:

楼上正解.

多继承是个丑陋的设计. 没什么用


我啥时候说多继承是丑陋的了? 完全是80%的开发者理解不了才在大多数的语言中被取消了...

你知道缺少多继承后,表达上缺少多少能力不?


好吧,我理解错了. 不过我还是觉得多继承就是个丑陋的设计. 
------解决方案--------------------
知道implement with不?知道Mixin不?

http://www.cnblogs.com/healerkx/category/136925.html
------解决方案--------------------
有接口和抽象类,多继承