首先我们已经了解了java中多态的基本概念
1方法重载。
2向上转型,向下转型

今天我们主要讲向上转型在android中的应用范例。
在java中向上向下转型的图解:

重点:子类对象向上转型为父类对象后,可以调用父类中的方法和子类中已经覆写过的父类方法。子类中新定义的方法无法访问
在android中,有这样一个需求,我需要通过bindService的方式从MainActivity访问服务中的方法,但是有的方法服务想让MainActivity进行访问,有的方法不想让MainActivity访问。
在下面的图解中,人民想要访问派出所中的办证方法,因为直接实例化服务对象调用没有上下文参数,是实现不了的,所以我们需要定义一个中间人来访问办证方法。
这个中间人能办证,陪领导打麻将,陪领导洗桑拿三个方法。

MainActivity:

package com.example.banzheng;import com.example.banzheng2.R;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;public class MainActivity extends Activity {private myConn conn;private Iservice myBinder;//定义的中间人对象   接口类型@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent=new Intent(this,DemoService.class);conn = new myConn();bindService(intent,conn, BIND_AUTO_CREATE);}//点击按钮调用服务里面办证的方法public void click(View v){myBinder.callBanZheng(10);}//监视服务的状态private class myConn implements ServiceConnection{//当服务连接成功的时候调用@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {myBinder = (Iservice)service;//向上转型为接口类型,该对象只能调用父接口中已被子类实现的方法,而在子类中三个方法已经全部“实现”,所以在接口中定义需要被覆写的方法就是该接口允许MainActivity访问的方法。}//失去连接@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stub}}@Overrideprotected void onDestroy() {//当activity销毁的时候解绑对象unbindService(conn);super.onDestroy();}
}

DemoService

package com.example.banzheng;import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;public class DemoService extends Service {//把我定义的中间人对象返回@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn new MyBinder();}//办证的方法public void banZheng(int money){if(money>1000){Toast.makeText(getApplicationContext(), "我是领导,把证给你办了", 1).show();}else{Toast.makeText(getApplicationContext(), "这点钱,还想办事。。。", 1).show();}}//打麻将的方法public void playMaJiang(){System.out.println("陪领导打麻将");}//洗桑拿的方法public void 洗桑拿(){System.out.println("陪领导洗桑拿");}//【1】定义中间人对象private class MyBinder extends Binder implements Iservice{//让MyBinder实现 Iservice接口public void callBanZheng(int money){//调用办证的方法banZheng(money);}public void callplayMaJiang(){//调用打麻将的方法playMaJiang();}public void callxiSangNa(){//调用洗桑拿的方法洗桑拿();}}}

Iservice(从这里定义Service想要暴露给MainActivity的方法)

package com.example.banzheng;public interface Iservice {//把领导想暴露的方法定义在接口里public void callBanZheng(int money);//人民只能调办证的方法。陪领导打麻将洗桑拿只能领导(服务)自己调用。
}

多态在android中(利用接口调用服务中方法)的应用相关推荐

  1. Android通过广播接收者调用服务内方法

    2019独角兽企业重金招聘Python工程师标准>>> 服务: package com.pas.callmethod;import android.app.Service; impo ...

  2. 为什要使用BindService?为了调用服务中的方法

    MainActivity类: package com.itheima74.whybindservice.service; import android.app.Service; import andr ...

  3. Python利用JPype调用Java对象方法【实现在Python中调用JAVA】

    一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...

  4. 安卓Service绑定方式启动服务并调用服务中的方法

    如有转载,请申明: 转载至 http://blog.csdn.net/qq_35064774/article/details/52578933 安卓的Service有两种启动方式,startServi ...

  5. html调用一个php文件路径_HTML中利用js调用php的内容

    HTML中利用js调用php的内容 经常会看到很多网站的统计代码都是以js调用的形式显示的,下面我们就来看看那如何实例的吧. $countfile = "num.txt"; //定 ...

  6. HTML中利用JS调用PHP (以登录为例)

    最近在做 Login 和 Register 的东西,因为需要用到 session 来存储用户的 id 和 用户名,所以需要调用 php 中的 session.由于不会 Ajax, 所以不得不用一些笨办 ...

  7. java中函数的调用,java中如何调用函数

    java动态调用函数,Java 中使用动态代码,java函数调用,java中如何调用函数 如何在 Java 中调用 C 函数 宗薇 [期刊名称]<网络新媒体技术> [年(卷),期]2000 ...

  8. 利用C++调用天气webservice-gSOAP方法

    利用C++调用天气webservice-gSOAP方法 首先需要下载一个gSOAP工具包 下载路径为:https://sourceforge.NET/projects/gsoap2/ 至于有关于gSO ...

  9. Java面试接口以及接口调用超时解决方法

    一.概念 是一个抽象类型,是抽象方法的集合(100%的抽象类).接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法.一个接口只有方法的特征没有方法的实现,因此这些方 ...

最新文章

  1. jquery控制只监听数字_无源!模拟!颜值高!简单实用!TC Level Pilot监听音量控制器...
  2. html5 Canvas画图教程(5)—canvas里画曲线之arc方法
  3. LeetCode:62. 不同路径
  4. [恢]hdu 1846
  5. Libcurl的介绍
  6. selenium自定义find_element
  7. MySQL(16)--- DELETE 语句
  8. 图像的一维熵和二维熵
  9. 笔记本更新网卡驱动后,出现:上网图标消失、网络连接为空、设备管理器中网络适配器全部为叹号、有线无线均无法链接的情况
  10. 未开票收入怎么申报?后期补票又怎么申报?
  11. 许奔创新社-第29问:什么是创新者的王者匠心?
  12. [云原生专题-59]:Kubesphere云治理-操作-分步部署Web业务平台RuoYi Cloud项目 - 手工上云部署实际过程全部操作步骤
  13. 去掉whatsns问答系统页面底部隐藏的官网链接
  14. idea配置文件乱码解决方法
  15. 《草根自媒体达人运营实战》一一1.3 各种自媒体平台及优缺点
  16. 小王的摆烂日记之6月工作总结
  17. python基础“猜单词游戏”代码
  18. 【Python编程:从入门到实践】第四章:操作列表
  19. 逾期怎么处理_信用卡逾期怎么和银行协商_信用卡逾期协商处理方法
  20. abb工业机器人教程 zxw_ABB工业机器人实操与应用技巧

热门文章

  1. MySQL 8.0.15解压版安装教程(windows版)
  2. 全网最详细 | Kerberos协议详解
  3. MySQL一条语句去重留一
  4. 三秒钟快速破解加密的PDF文件
  5. Dalsa Sherlock 直连千兆网相机(自定义驱动)
  6. 求质数算法的 N 种境界[1] - 试除法和初级筛法
  7. yale patt 的计算机系统导论,[转载]Yale N. Patt教授的《计算机系统概论》
  8. 互联网摸鱼日报(2023-06-07)
  9. JAVA毕设项目夕阳红养老院系统(java+VUE+Mybatis+Maven+Mysql)
  10. 顶尖众筹商业模式实操案例分享,打开你全新的赚钱思维!