首页 > 代码库 > java中的接口interface

java中的接口interface

关于接口

接口描述了实现了它的类拥有什么功能。因为Java是强类型的,所以有些操作必须用接口去约束和标记。接口作为类的能力的证明,它表明了实现了接口的类能做什么。

 

接口中的成员

接口中的所有的成员,缺省情况下都是public的,也必须是public,无论是方法,还是字段。因为接口就是规定了API,如果实现的类不公开接口中的API,怎么能叫API呢?

接口中可以 定义方法 和 字段。

接口中的字段,缺省(也是必须)为 public static final  。在定义的接口中必须初始化,因为是final。它们将成为类中的静态常量字段

接口中的方法,缺省(也是必须)为 public abstract    。只需在接口中定义即可,不能实现(让实现了接口的类去实现)。将成为类中的public 实例方法  , 实现了接口的类必须实现接口中定义的方法。

 

 

 

接口和类之间的implements关系

接口就是用来被实现implements 的 ,不然定义接口也就没意义了。Java中的类只能继承一个父类,但是可以实现多个接口。除了抽象类,普通类必须实现接口中定义的所有方法。

当一个类实现了某个接口后,接口可以看做是 是实现了接口的类 的 父类。利用多态的特性,我们往往选择面向接口编程,而不是面向具体的类,这样可以让程序员关注API而不是内部实现,并提供更大的灵活性。

 

public class Test {

    
    public static void main(String[] args) {
        
        Shape[] shapes = {
                
            new Rectangle(5,6),
            new Triangle(3, 4, 5),
            new Triangle(6, 8, 10)    
        };
        
        double totalArea =0;
        double totalCircle =0;
        
        for(Shape s:shapes)
        {
            totalArea += s.getArea();
            totalCircle += s.getCircle();
            
        }
        
        System.out.println("totalArea:"+totalArea);
        System.out.println("totalCircle:"+totalCircle);
        
        System.out.println( new Triangle(3,4,5) instanceof Shape);   //true
        
        
    }
}

interface Shape
{
    double getArea();
    double getCircle();
}


class Rectangle implements Shape
{

    Rectangle(int w,int h)
    {
        width = w;
        height =h;
    }

    
    private int width;
    private int height;
    
    
    @Override
    public double getArea() {


        return height*width;
    }

    @Override
    public double getCircle() {
        
        return 2*(height+width);
    }
    
}

class Triangle implements Shape
{

    Triangle(int a,int b,int c)
    {
        e1  = a;
        e2 = b;
        e3 = c;
        
    }
    
    private int e1;
    private int e2;
    private int e3;
    
    @Override
    public double getArea() {
        
        double p = (e1+e2+e3)/2.0;
        
        
        double area= Math.sqrt(p*(p-e1)*(p-e2)*(p-e3));
        
        return area;
    }

    @Override
    public double getCircle() {
        
        return e1+e2+e3;
    }
    

}

 

抽象类于接口

java集合框架中的例子

技术分享

 

 

 

 

 

 

接口和接口之间的extends关系

 

接口可以扩展extends 已经存在的接口,如果接口A扩展了接口B,则A将继承B中的所有成员,就像他们定义在A中一样。一个接口可以扩展多个接口

interface Shape
{
    double getArea();
    double getCircle();
}

interface Color
{
    void setColor(int color);
    void getColor();
}

interface Rectangle extends Shape , Color
{
    double getWidth();
    double getHeight();
    
}

 

这样,一个类如果要实现Rectangle 接口,就必须实现 上面的6个方法。

 

 

 

接口的总结

 

1、接口不能new出实例。但可以定义接口类型的变量,去引用实现了这个接口的类的对象。此时接口相当于实现类的父类。

2、接口中的方法不实现,而是用一个 分好  ; 代替函数体。

3、接口是Java中的一种引用类型。

 

java中的接口interface