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的对象。 

    转载

  • 相关阅读:
    加班的价值
    webApp 阅读器项目实践
    Oak Seeds 网站项目回顾
    [Echarts]用Echarts绘制饼状图
    [转载] 编程每一天(Write Code Every Day)
    对杀毒软件技术的浅浅理解
    记我的第二次自动化尝试——selenium+pageobject+pagefactory实现自动化下单、退款、撤销回归测试
    学习Selenium遇到的问题和解决方案
    记我的第一次自动化尝试
    jmeter环境配置、使用以及参数化之CSV Data Set Config
  • 原文地址:https://www.cnblogs.com/lijia0511/p/4950820.html
Copyright © 2011-2022 走看看