微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

Java的内部类实现多继承只是个噱头?

时间:2014-04-10 09:45  浏览:努力统计中...
不好意思兄弟我只能用这个标题啦。。。 内部类号称实现多继承,弄得好像只有用内部类才能实现多继承似的,实际上呢? 我修改了下这个页面给的例子如下:(http://blog.csdn.net/Boss
不好意思兄弟我只能用这个标题啦。。。
内部类号称实现多继承,弄得好像只有用内部类才能实现多继承似的,实际上呢?
我修改了下这个页面给的例子如下:(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)无疑会出错,也就是说内部类对象也仅仅是自己实现的那个接口或者继承的类类型,它并不是外围类类型,只是它可以随意取用外围类的资源使得它似乎就是外围类类型——这是我的看法。。。。请各位高手指点下,内部类是不是伪多继承?除了取用外部类资源便利和封装,它还有其它优势吗?
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------