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

    转载

  • 相关阅读:
    前后端分离开发中动态菜单的两种实现方案
    Spring Security 前后端分离登录,非法请求直接返回 JSON
    Spring Boot2 系列教程(九)Spring Boot 整合 Thymeleaf
    原创的离线版 Redis 教程,给力!
    Spring Boot2 系列教程(八)Spring Boot 中配置 Https
    Anaconda创建环境、删除环境、激活环境、退出环境
    开源一个功能完整的SpringBoot项目框架
    Spring Boot和Spring Cloud学习资源推荐
    Ubuntu 18.04下安装Steam顶级在线游戏平台
    终极手撕之架构大全:分布式+开源框架+微服务+性能优化,够不够?
  • 原文地址:https://www.cnblogs.com/lijia0511/p/4950820.html
Copyright © 2020-2023  润新知