java-接口

来源:互联网 发布:淘宝商品上架时间 编辑:程序博客网 时间:2024/06/15 14:03
package com.outlook;//最后要加“;”
public interface Fun {
    //定义了接口,就是定义了
    //接口中的方法都是抽象方法,接口中的方法都是public,而抽象类中可以有实现方法
    //接口中的方法缺省的也是public方法。
    //不能生产对象。但可以产生对象的引用,用在向上转型。
    //实现一个接口不能使用extends,使用implements,
    //一类可以实现多个接口,一个接口可以继承多个接口
    //一个类实现多个接口用“,”隔开,一个接口继承多个接口也需要使用“,”隔开
    //实现一个接口必须实现它所有的函数。
    void read();
    void writ();
}


//接口的好处:

体现在工厂方法的使用:比如我们有一个接口:Fun,三个实现接口的类functionA、functionB、functionC

Fun有两个方法:read();writ();

/****************************Fun********************************/

package com.outlook;//最后要加“;”
public interface Fun {
    void read();
    void writ();
}
/****************************functionA********************************/
package com.outlook;

public class functionA implements Fun {

    @Override
    public void read() {
        // TODO Auto-generated method stub
        System.out.println("functionA read");
        
    }

    @Override
    public void writ() {
        System.out.println("functionA writ");
        // TODO Auto-generated method stub
        
    }

}
/****************************functionB********************************/
package com.outlook;

public class functionB implements Fun {

    @Override
    public void read() {
        // TODO Auto-generated method stub
        System.out.println("functionB read");
        
    }

    @Override
    public void writ() {
        System.out.println("functionB writ");
        // TODO Auto-generated method stub
        
    }
}
/****************************functionC********************************/
package com.outlook;

public class functionC implements Fun {

    public void read() {
        System.out.println("functionC read");
        // TODO Auto-generated method stub
    }
    public void writ() {
        System.out.println("functionC writ");
        // TODO Auto-generated method stub
        
    }

}
/****************************Factory********************************/

package com.outlook;

public class Factory {
    static Fun chose(int sort){
        Fun fun = null;
        if(sort == 3){
            fun = new functionC();
        }
        else if(sort == 1){
             fun = new functionA();
        }
        else if(sort == 2){
             fun = new functionB();
        }
        
        return fun;
    }
}

/****************************Test********************************/

package com.outlook;

public class Test {
   
    public static void main(String[] a){
        
        Fun fun = Factory.chose(2);
        fun.read();
        fun.writ();
        
    }
    
    
}

封装方法:我们只需要通过传入一个参数就能随意调用三个function*的read和writ的方法。

这个时候体现了接口和向上转型的好处。还有静态方法,方便我们调用

如果没有接口,我们需要在function*类里分别写出这两个方法,两个不可怕,如果有一百个呢?你若是忘了少些一个两个的到时候用不着也就算了,万一用到了结果你没有这个功能怎么


如果没有向上转型,我们需要单独生产每个确定的类,比如,调用functionA的read()函数,那么我们就要生产functionA的对象,如果有一百个function*类呢,我们就要生产一百个function*对象,

如果没有Factory,那我们每次使用都需要实现Factory里面的判断,虽然向上转型为我们省了不少代码,但是每次都需要写那个chose()判断函数,如果调用一百次那还不写死,所以我们把它又封装在Factory里面这样就实现了Test里面的那种简单实用的调用了。只需要调用一个Factory对象就行了,不管你以后是在Test类里面调用还是在其他类里面调用,都只需要生产一个Factory对象,Factory就是工厂的意思,这个类的功能也跟工厂一样,需要做什么只需要告诉工厂就行了,工厂帮你实现。

静态函数的作用就不用说了吧,在这多少也能帮我们省两行代码。


0 0
原创粉丝点击