前言:接口是什么?
接口是一种没有继承关系的特殊抽象类。抽象类强调子类相同属性的规范,保证所有子类都有相同的接口实现;接口则主要强调子类要实现的方法。
接口的用法(一):实现某种功能
在日常生活中,晚上冲浪是习以为常的一件事情。我们可以使用手机进行网上冲浪,也可以使用电脑进行网上冲个浪。因此,定义一个网上冲浪的抽象接口 ISurfing
public interface ISurfing{
//冲浪
void surf();
}
new 一台普通的电脑实现冲浪接口。
public Computer implements ISurfing{
@Override
void surf() {
System.out.println("使用电脑网上冲浪");
}
}
使用:
public class Test {
public static void main(String[] args) {
//方法一:常规使用
Computer computerA = new Computer();
computerA.surf();
//方法二:多态
//不用在乎里面的实现细节,能上网的手机、电脑等等都可以。
ISurfing surfDevice = new Computer();
surfDevice.surf();
}
}
接口的用法(二):实现多种功能(多实现)
单个类无法多继承,但我们可以使用实现多个接口的方式实现“多继承”效果。例子:笔记本电脑不仅能网上冲浪、还能视频剪辑。因此,定义两个接口:1.网上冲浪 ISurfing 2.剪辑视频 IEdit
public interface ISurfing{
//冲浪
void surf();
}
public interface IEdit{
//剪辑
void edit();
}
老规矩,new 一台普通的电脑实现冲浪和视频剪辑接口。
public Computer implements ISurfing,IEdit{
@Override
void surf() {
System.out.println("使用电脑网上冲浪");
}
@Override
void edit() {
System.out.println("使用电脑剪辑视频");
}
}
使用:
public class Test {
public static void main(String[] args) {
Computer computerA = new Computer();
computerA.surf();
computerA.edit();
}
}
接口的用法(三):用于回调
使用情景:当我们需要调用某些方法进行延时操作并需要在操作结束后返回结果(例如:下载文件等)。接下来举一个简单的例子方便大家理解Interface的用法。
情景:你在上课,但是你的快递到了。此时你打电话告诉你舍友并希望如果他在拿到快递后立马告诉你结果。
代码如下:
1.定义接口 onTakeExpressCallback
public interface onTakeExpressCallback {
void success(String message);
void failed(String message);
}
2.定义舍友这个类,里面提供拿快递的方法
public class Roomate {
String name;
public Roomate(String name) {
this.name = name;
}
//拿快递方法
public void TakeExpress(onTakeExpressCallback onTakeExpressCallback) {
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
onTakeExpressCallback.success("好兄弟,"+ name +"帮你搞定了!");
}
}, 3000);
}
}
3.在Activity中实现 onTakeExpressCallback接口
public class MainActivity extends AppCompatActivity implements onTakeExpressCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AskForHelp();
}
@Override
public void success(String message) {
Log.d("MYZ", "message:"+message);
}
@Override
public void failed(String message) {
Log.d("MYZ", "message:"+message);
}
public void AskForHelp() {
Roomate roomate = new Roomate("雷锋同志");
roomate.TakeExpress(this);
}
}
然后就可以通过接口提供的方法获取得到执行TakeExpress后的返回值。(成功或失败)