java接口的使用

目的:实现不同类型之间的数据通信。

例子1:

借口:

public interface MsgListener {
    void onMessageArriverd(String msg);
}
 
数据接收类
public class Receiver implements MsgListener{
    @Override
    public void onMessageArriverd(String msg) {
        Log.i("kelijun","Receiver MSG");
        //Toast.makeText(this,"Receiver MSG ",Toast.LENGTH_SHORT).show();
    }
}
数据发送类
public class Send extends Activity{
    private Receiver mReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mReceiver=new Receiver();
        mReceiver.onMessageArriverd("你好");
    }
}
这个例子是发送消息给实现了接口的类,直接调用。


例子2:设置消息的监听,如果有消息了,将把消息发送给监听了这个消息的人。如果有很多类 ,设置了监听这个消息,那么这些类都会收到消息。

public interface MsgListener {
    void onMessageArriverd(String msg);
}

2个接收数据的实现了接口的类

接口

public class Receiver implements MsgListener{
    @Override
    public void onMessageArriverd(String msg) {
        Log.i("kelijun","Receiver MSG");
        //Toast.makeText(this,"Receiver MSG ",Toast.LENGTH_SHORT).show();
    }

}
发送数据的类

public class Receiver1 implements MsgListener{
    @Override
    public void onMessageArriverd(String msg) {
        Log.i("kelijun","Receiver MSG 1");
        //Toast.makeText(this,"Receiver MSG ",Toast.LENGTH_SHORT).show();
    }

}
public class Send extends Activity{
    private Receiver mReceiver;
    private Receiver1 mReceive1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mReceiver=new Receiver();
        mReceive1=new Receiver1();
        setMsgListener(mReceiver);
        setMsgListener(mReceive1);
        msgListener.onMessageArriverd("你好");
    }
    private MsgListener msgListener;

    public void setMsgListener(MsgListener msgListener) {
        this.msgListener = msgListener;
    }
}

这里是不能达到目的的(测试过,只有后面receiver1才有打印),这个因为很多事情往往只是说如何做可以办到,但是你去做的时候往往结果不一样,就是因为我们人的思路是不一样的,比如有一个人对你说,抢银行赚了很多钱,你不要参照他的做法,你听过一句名言吗?失败是成功之母,所以我们只要学习失败,比如上面的例子,我们要思考为什么不可以,不要背那种方法可以。我觉得这才是学习之路,永远是思考,不是盲从,忙背。

比如我们国家中国,很多时候说什么GDP今天又增加了多少,人们的生活水平又如何升高了,人们是过的很好,我觉的应该把焦点放在失败的地方,比如说今天有多少人做了不喜欢的工作,又有多少人为了省钱饿肚子,看见喜欢的水果舍不得买,这样我们才有动力去完善我们的不足。失败是成功之母,为什么这句话大家不好好实践。把注意力放在不足的地方,然后去学习,去改正啊。

好了,其实我也不清楚上面的接口怎么实现的,那么我去想为什么,怎么才能办得到。

那么我修改一下


setMsgListener(mReceive1);
setMsgListener(mReceiver);
发现只有
mReceiver接收到消息,说明只有后面设置监听的人收到消息,前面的被覆盖了。那么我们去找到一种不能被覆盖的方法。
查资料然后改进后:
public class Send extends Activity {
    private List<MsgListener> msgListeners;
    private Receiver mreReceiver;
    private Receiver1 mreReceiver1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        msgListeners = new ArrayList<>();
        mreReceiver = new Receiver();
        mreReceiver1 = new Receiver1();
        addListener(mreReceiver);
        addListener(mreReceiver1);
        for (int i = 0; i < msgListeners.size(); i++) {
            MsgListener l = msgListeners.get(i);
            l.onMessageArriverd("你好");
        }
    }

    public void addListener(MsgListener l) {
        msgListeners.add(l);
    }

}
意思就是,必须要给每一个接口发送消息才行。
 

本文是一个word讲义 介绍了 Figure circle Rectangle等类在接口计抽象类的用法 抽象类 接口多态 public class Polymorphism { public static void main(String args[]) { Triangle t=new Triangle(5.0,2.0); t.show_area(); Rectangle r=new Rectangle(3.0,4.0); r.show_area(); Circle c=new Circle(10.0); c.show_area(); } } abstract class Figure { protected double x=10.0,y=5.0; abstract void show_area(); } class Triangle extends Figure { Triangle(double a,double b) { x=a; y=b; } void show_area() { System.out.println("triangle:"+(0.5*x*y)); } } class Rectangle extends Figure { Rectangle(double a,double b) { x=a; y=b; } void show_area() { System.out.println("rectangle:"+(x*y)); } } class Circle extends Figure { Circle(double a){x=a;} final double pi=3.1416; void show_area() { System.out.println("circle:"+(pi*x*x)); } } package inf; interface Figure { abstract double area(); } //Rectangle.java package inf; /** * * @author tai */ public class Rectangle implements Figure{ double width,height; public Rectangle(double w,double h) //构造方法 { width=w; height=h; } public double area(){ return (width * height); } } //Triangle.Java package inf; /** * * @author tai */ class Triangle implements Figure { double a; double b; double c; Triangle(double a,double b,double c) { this.a=a; this.b=b; this.c=c; } public double area() { double p=(a+b+c)/2; return Math.sqrt(p*(p-a)*(p-b)*(p-c)); } } //Circle.java package inf; /** * * @author tai */ class Circle implements Figure { double radius; Circle(double radius) { this.radius=radius; } public double area() { return Math.PI*radius*radius; } } 测试一: public class Test4 { public static void main(String args[]) { Triangle t=new Triangle(5.0,6.0,7.0); System.out.println("三角形面积="+t.area()); Rectangle r=new Rectangle(3.0,4.0); System.out.println("矩形面积="+r.area()); Circle c=new Circle(10.0); System.out.println("圆的面积="+c.area()); } } 测试二: package inf; import javax.swing.JOptionPane; public class Test5 { public static double totalArea1(Figure f[]) { double totalArea=0; for(Figure f1:f){ totalArea+=f1.area(); } return totalArea; } public static void main(String args[]) { Figure f[] =new Figure[3];//为什么 f[0]=new Triangle(5.0,6.0,7.0); f[1]=new Rectangle(6.0,87.0); String input=JOptionPane.showInputDialog("输入圆的半径"); Double r=Double.parseDouble(input); f[2]=new Circle(r); double totalArea=0; for(Figure f1:f){ totalArea+=f1.area(); } JOptionPane.showMessageDialog(null,"totalarea="+totalArea); JOptionPane.showMessageDialog(null,"totalarea1="+totalArea1(f)); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值