Android interface(接口)详解 您所在的位置:网站首页 安卓的接口叫什么名字啊 Android interface(接口)详解

Android interface(接口)详解

2023-12-26 13:30| 来源: 网络整理| 查看: 265

Android interface(接口)详解 什么是接口接口的使用场景接口的实现写法

什么是接口

可以理解成一种特殊的类,由常量和抽象方法组成的特殊类; 接口不可以实例化;接口中的方法没有方法体;继承接口的类一定要实现接口中定义的方法。 例:

public interface InterfaceDemo { int i = 10; //常量 void method1(); //方法(没有方法体) int method2(); //方法(没有方法体) } 接口的使用场景 多重继承 Java本身是不支持类的多重继承(多重继承是指一个类从多个类继承而来,即一个类拥有多个超类) 但一个类却可以实现多个接口,我们可以将一些抽象方法定义在接口中,使用继承多个接口的方法间接地达到多重继承的目的 例: //第一个接口 public interface MyInterface1 { void fly(); } //第二个接口 public interface MyInterface2 { void walk(); } public class Bird implements MyInterface1, MyInterface2 { //通过implements关键字继承上述两个接口,多个接口用“,”分隔 private static final String TAG = "Bird"; @Override // 实现接口MyInterface1中的fly()方法 public void fly() { Log.i(TAG, "I can fly"); // 可根据需求完成自己的方法体 } @Override public void walk() { // 实现接口MyInterface2中的walk()方法 Log.i(TAG, "I can walk"); // 可根据需求完成自己的方法体 } } 定义一个规范 同一个接口可以有多个不同的实现类,但每一个实现类都必须重写接口中所有的抽象方法。 即接口不考虑这些实现类各自采用什么方式实现这些功能,但它要求所有的实现类都必须有这些功能。 例: //定义一个计算器接口 public interface Calculator { /** 计算器可以计算两个数的和 */ int add(int a, int b); /** 计算器可以计算两个数的差 */ int sub(int a, int b); /** 计算器可以计算两个数的积 */ long mul(int a, int b); /** 计算器可以计算两个数的商 */ float div(int a, int b); } //该类实现了计算器接口,并填充了具体实现方法 public class ACalculator implements Calculator { @Override public int add(int a, int b) { //实现接口 return a + b; //具体实现方法 } @Override public int sub(int a, int b) { //实现接口 return a - b; //具体实现方法 } @Override public long mul(int a, int b) { //实现接口 return a * b; //具体实现方法 } @Override public float div(int a, int b) { //实现接口 return (float) a / (float) b; //具体实现方法 } } //这个类中使用ACalculator中的方法。这里并不需要了解ACalculator是通过什么方式计算的,只需要了解Calculator接口中的相关方法定义即可。 Test.java Test.java public class Test { public static void main(String[] args) { Calculator calculator = new ACalcuAlator(); //接口赋值(ACalcuAlator类中已经实现了Calculator接口) int sum = calculator.add(12, 14); //相当于调用ACalcuAlator中的add()方法 System.out.println("sum = " + sum); } } 回调 回调就是把方法的定义和功能实现分开的一种机制 例: //定义一个接口 public interface OnListener { public void onClick(String msg); } class Test { private OnListener onListener ; //定义一个的接口类型的变量存储数据 //在合适的位置调用接口里面的方法,传递数据 public void callBack(string msg) { if (onListener != null) { onListener .onClick(msg); } } //创建一个公共的方法,让外部调用,并且传递接口类型的参数,给其定义的接口类型的数据初始化 public void setOnListener(OnListener onListener) { this.onListener= onListener; } } public class Activity { Test test; test.setOnListener(new Test.OnListener () { @Override public void onClick(msg) { //使用传回的值 } }); } 接口的实现写法 //定义接口 public interface OnKeyValueListener { void getKeyValueClick(String value); } public class MyButton { public MyButton(Context context) { } private OnKeyValueListener mOnkeyValueListener; //声明OnKeyValueListener接口对象 //接口中的方法赋值(传递需要的数据) public void doClick() { if (mOnkeyValueListener!= null) { mOnkeyValueListener.getKeyValueClick("点击了A"); } } public void setmOnkeyValueListener(OnKeyValueListener mOnkeyValueListener) { this.mOnkeyValueListener = mOnkeyValueListener; //MainActivity 类中调用该方法,传入监听对象 } } implements形式 public class MainActivity extends Activity implements OnKeyValueListener{ MyButton myButton ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myButton = new MyButton(MainActivity.this); myButton.setmOnkeyValueListener(this); //传递监听对象到A类 myButton.doClick(); //这里是调用A类中的方法,接受到A类传入的内容 } @Override public void getKeyValueClick(String value) { Log.d("MyLog","######## value = "+value); //打印获取到的内容 } } 内部类形式 public class MainActivity extends Activity{ MyButton myButton ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myButton.setmOnkeyValueListener(new MyButton.OnKeyValueListener () { @Override public void getKeyValueClick(String value) { Log.d("MyLog","######## value = "+value); //打印获取到的内容 } }); }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有