本节内容
1.接口的理解和定义
2.接口实现数据回调
3.接口实现回调(中介租房)
一、接口的理解和定义
1.接口:一套协议,一套行为规范,是纯抽象类,所有成员函数都是抽象函数,所有成员变量都是public static final。设计程序时先定义接口,再实现类。任何需要在函数间传入传出的一定是接口而不是具体的类
2.使用interface表示定义一个接口,接口也可以继承多个接口(多个接口之间用逗号隔开),但不能继承类。interface是一种特殊的class。类可以实现很多接口,接口不能实现接口。
interface t1{
}
interface t2{
}
public interface DataIteration extends t1,t2{
}
3.接口内部元素:①接口不能被实例化(没有构造方法) ②接口里面可以定义变量,但只能是静态成员变量(默认修饰符 public static final),用这种方式替代枚举
4.方法:抽象方法(不需要自己实现,谁用谁就实现),默认修饰符(public abstract),使用implements实现接口,必须实现接口里面定义的方法,接口里面的方法都是抽象方法
public class MacBook implements DataIteration{
@Override
public void input() {
System.out.println("苹果电脑安全输入");
}
@Override
public void output() {
System.out.println("苹果电脑流畅输出");
}
}
5.内部接口:如果不想实现接口里的所有定义的方法,可以在接口里面定义一个内部接口,那么在子类调用接口时可以有选择的继承哪一个接口,以下为定义内部接口
public interface DataIteration {
interface Output{
void output();
}
interface Input{
void input();
}
}
以下为继承内部接口的方法
public class Mouse implements DataIteration.Output{
@Override
public void output() {
System.out.println("鼠标输入坐标位置:东经38°,北纬55°");
}
}
注:只继承了一个内部接口
二、接口实现数据回调
1.定义一个接口,统一返回数据的方式
public interface OnHttpfinishedlistener{
void onSuccess(String img);
void onFailure(String err);
}
2.定义一个变量接收谁来监听网络下载完毕的事件
private OnHttpfinishedlistener Listener;
3.设置提供set方法,保持当前的监听者
public void SetListener(OnHttpfinishedlistener Listener){
this.Listener=Listener;
}
4.任务结束,回调数据
public void GetData(String uri){
System.out.println("开始下载。。。");
System.out.println("图片下载完毕。。。");
//任务结束,回调数据
Listener.onSuccess("你的图片下载成功");
}
5.必须实现接口内部所有的抽象方法
@Override
public void onSuccess(String img) {
System.out.println("展示图片:"+img);
}
@Override
public void onFailure(String err) {
System.out.println("下载失败"+err);
}
6.定义一个Http类,传递当前对象给功能类,再调用功能类完成功能
public SplashView(){
//开始下载数据
Http http=new Http();
//6.必须传递当前对象给功能类
http.SetListener(this);
//7.调用功能类完成功能
http.GetData("www.baidu.com");
}
7.在主类里面创建一个新的类,它会自动调用默认构造方法,完成以上的一系列操作
public class MyClass {
public static void main(String[] args) {
SplashView sv=new SplashView();
}
}
三、接口实现回调(中介租房)
1.创建一个中介类,在里面写一个租房方法,然后定义要租房的对象,因为用private修饰,所以使用set方法间接访问该成员变量。用接口实现代理设计模式
public class Agent {
private Person FuPo;
private Dog KeJi;
public void RantHouse() {
System.out.println("我是中介,开始找房源");
System.out.println("找到房子了");
if (FuPo != null) {
FuPo.CallbackUseQQ("你好");
}
if (KeJi != null) {
KeJi.CallbackUsePhone();
}
}
public void setFuPo (Person FuPo){
this.FuPo = FuPo;
}
public void setKeJi (Dog KeJi){
this.KeJi = KeJi;
}
}
2.定义一个Person类,说明要租房的是人,在这里面先写一个方法来找房子,再自己定义一个接收方法
public class Person {
public void NeedOneHouse(){
//找一个中介完成租房功能
Agent agent =new Agent();
//告诉他有结果了返回给谁
agent.setFuPo(this);
//开始找房
agent.RantHouse();
}
//自己定义一个接收的方法
public void CallbackUseQQ(String msn){
System.out.println("辛苦了");
}
}
3.定义一个Dog类,原理类似Person类
public class Dog {
public void wangwang(){
//找中介
Agent zs =new Agent();
//告诉它返回给谁
zs.setKeJi(this);
//开始找房
zs.RantHouse();
}
public void CallbackUsePhone(){
System.out.println("wangwang");
}
}
4.最后在主函数里面分别定义一个Person 和Dog对象,再分别调用里面的找房方法实现找房功能
public class MyClass {
public static void main(String[] args) {
Person jia=new Person();
jia.NeedOneHouse();
Dog dahuang=new Dog();
dahuang.wangwang();
}
}
5.对于功能类(此处指Agent类)来说:①每增加一个使用者就需要添加一个成员变量保存(此处指Person成员FuPo和Dog成员KeJi)解决方法:使用多态,用接口类型的变量 接收所有子类类型
public class Agent {
private OnAgentFinishListener Listener;
public interface OnAgentFinishListener{
void UnFinish(String des);//抽象方法定义
}
public void RentHouse(){
System.out.println("我是中介,开始找房源");
System.out.println("找到房子了");
//回调数据
if(Listener!=null){
Listener.UnFinish("四合院");
}
}
public void SetListener(OnAgentFinishListener Listener){
this.Listener=Listener;
}
}
②写一个set方法设置对象(此处指setFuPo和setKiJi方法) ③判断并调用相应的方法接收数据(此处指RantHouse里if语句包含的方法)
6.对于使用者来说:①必须自己定义一个方法接收数据(此处指CallBackUseQQ和CallBackUsePhone方法)解决办法:定义接口,接口中规范接收的方式
public class Agent {
public interface UnAgentFinishListener{
void UnFinish(String des);
}}
OK,以上就是今天的全部内容了,再见!
网友评论