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中的一种引用类型。

时间: 2024-08-24 18:10:59

java中的接口interface的相关文章

【juincen】Java中的接口interface类比js中的回调函数

前几天在左讯飞语音的时候,无意间意识到java中的接口和js中常用的回调函数有点类似,今天在这儿整理一下思路. interface,Java中的接口,为什么会有这个东西. 一,预留声明 比如两个程序员A和B,A要写一段程序,其中需要调用到B写的程序.这时候A可以写一个接口: public interface Demo{ void deal(); } A要调用的方法先“预留声明”在接口里:deal 然后B去完善这个接口,B写了一个实现类实现了这个Demo接口. A在自己的业务逻辑里面只用调用接口的

Java中的接口(interface)

Java中提倡面向接口编程,而不是面向类编程,个人理解就是将做什么和怎么做分开,以实现松耦合的目的. 基本数据类型分四类八种 : 整型.浮点型.字符型.布尔型: 引用数据类型分三种 : 类 . 接口 . 数组 : 1.接口不是类: 2.接口中也有属性和方法,接口中的属性默认用 public static final 修饰: 3.接口中的方法默认用 public abstract 修饰,接口中不能包含非抽象方法: 4.一个类可以实现接口,用implements关键字实现,如果一个类实现了接口,那么

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

JavaSE入门学习20:Java面向对象之接口(interface)

一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些 类里方法的实现细节,它只规定这些类里必须提供某些方法.一个类或接口通过继承接口的方式,从而来继承接口的 抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念.类描述对象的属性和方法.接口则包含 类要实现的方法.除非实现接口的类是抽

为什么Java中有些接口没有任何方法

由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念.接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类.接口中只包含方法的定义,没有方法的实现.接口中的所有方法都是抽象的.接口中成员的作用域修饰符都是public,接口中的常量值默认使用public static final修饰.由于一个类可以实现多个接口,因此通常可以采用实现多个接口的方式来间接的达到多重继承的目的. 在Java语言中,有些接口内部没有声明任何方法,也

Java中Comparator接口

Comparator位于java.util包下 public interface Comparator<T> 强行对某个对象 collection 进行整体排序 的比较函数.可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制.还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序. 当且仅当对于一组

java中的接口深层理解

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.

JAVA中的接口和抽象类(转)

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题领域进行分析. 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象. 比如:我们要描述“水果”,它就是一个抽象,它有质量.体积等一些共性(水果有质量),但又缺乏特性(苹果.橘子都是水果,它们有自己的特性),我们 拿不

使用Go来模拟Java中的接口 实现类

针对项目中,相同的流程业务进行重构,使用Go来简单模拟Java中的接口,实现类的方式进行重构.分享一简单例子: package main //模拟java中的接口,实现类 import "fmt" // 声明一个接口, type workthread interface { do(name string) } // 传入的wt的子类不同,do方法执行的逻辑也不同 func Handle(wt workthread, name string) { fmt.Println("--