zoukankan      html  css  js  c++  java
  • java实现多继承

    方法:  接口+组合

    理由:通过接口实现客户端的使用时多继承类的多类, 通过组合实现客户端内部类的实现相关功能(而且有些共用的功能可以不总是多次实现)。

    public interface GMapObserverDec 
    {
     public void initTarget();
     public void uninitTarget();
     public void  updateObserver();
    }

    public abstract class GMapObserverDef  implements GMapObserverDec
    {
     protected GMapTargetDec m_pGMapTarget = null;
     public GMapObserverDef(GMapTargetDec pGMapTarget)
     {
      m_pGMapTarget = pGMapTarget;
     }
     public void initTarget()
     {
      m_pGMapTarget.attach(this);
     }
     public void uninitTarget()
     {
      m_pGMapTarget.detach(this);
     }
     abstract public void updateObserver();
    }

    //----------------------------------------------------------------------多继承-------------

    public class GMapPerson extends Overlay implements GMapObserverDec
    {
     GMapPerson(LocationBlog pLocationBlog)
     {
      m_pGMapObserver = new GMapObserverEx(pLocationBlog);
     }

     
     //------------------------------- 多继承语法要求的冗余代码 ------------------
     class GMapObserverEx extends GMapObserverDef
     {
      public GMapObserverEx(GMapTargetDec pGMapTarget) 
      {
       super(pGMapTarget);
       // TODO Auto-generated constructor stub
      }

      @Override
      public void updateObserver() 
      {
       // TODO Auto-generated method stub
       System.out.print("GMapPerson! /n");
       //GMapPerson.this.updateObserver();
      }
     }
     public void initTarget() 
     {
      // TODO Auto-generated method stub
      m_pGMapObserver.initTarget();
     }
     public void uninitTarget() 
     {
      // TODO Auto-generated method stub
      m_pGMapObserver.uninitTarget();
     }
     public void updateObserver() 
     {
      m_pGMapObserver.updateObserver();
     }
     GMapObserverEx m_pGMapObserver = null;
     //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    }

    其中几个语法点:

    1, 内部类访问外部类要: 用“类名.this.函数”这样的形式,例如GMapPerson.this.updateObserver();

    2, 一个类继承了另一个类的内部类,因为超类是内部类,而内部类的构造方法不能自动 
    被调用,这样就需要在子类的构造方法中明确的调用超类的构造方法。 
    接上例: 
    class C extends A.B { 
    C() { 
        new A().super();  // 这一句就实现了对内部类构造方法的调用。 


    构造方法也可这样写: 
    C(A a) { 
        a.super(); 
    }  // 使用这个构造方法创建对象,要写成C c = new C(a); a是A的对象。 

    转载

  • 相关阅读:
    PP篇10 修改工单组件行
    取未清PO逻辑
    PP篇7 生产替代料齐套后处理
    PP篇9 更改计划订单
    DEBUG技巧里的问题1 双击某个变量不能显示
    HoloLens开发手记
    开始开发HoloLens应用吧 Start Developing HoloLens Apps Today
    HoloLens开发手记
    HoloLens开发手记
    HoloLens开发手记
  • 原文地址:https://www.cnblogs.com/lijia0511/p/4950820.html
Copyright © 2011-2022 走看看