java学习笔记之接口

1、接口

       面向对象的思想是将所有的事物都看作一个对象,对象的复杂性也导致了我们生活的多样性,但多样性之中含有共性。比如人有很多种,有学生、有老师、有医生。但所有的人正常人都有他们的共性,比如会跑步,会说话,会思考。所以跑步、说话、思考可以是从特性中抽象出来得共性的东西。Java针对这一特性设计出了接口这样一个概念。虽然每个正常的人都会说话、会跑步、会思考,但他们实现这些行为的方式是不同的,有的人说话声音大,内容有条理;有的人说话声音小,但有感染力。无论是怎样的方式他们都具有说话这样的功能。因此有了多态的概念。我们可以说学生是一个正常的人,但不可以说人是学生。所以我们可以把学生这个对象赋值给人这个接口。一个学生可能是一个人,也可能是一个动物,所以他具有人和动物的共性。所以学生可以同时实现动物和人这两个接口。Java不支持多继承,所以通过实现多个接口,实现多继承。

       接口是对java的抽象思想的进一步深化,在 《Thinking in java》一书中这样描述接口“The interface keyword takes the concept of abstractness one step further”。接口是对类的进一步抽象,与抽象类不同。抽象类是将一个类中的一个或者几个方法进行抽象,所抽象的方法仅有返回值和方法名,没有具体实现。由于抽象类方法必须被实现,所以抽象类的抽象方法的访问权限必须是public。而接口则是抽象类的进一步抽象,接口内所有的方法都没有具体实现,仅有方法名称和返回类型。类通过implements关键字类实现接口,接口的实现类必须实现接口内的所有方法,但经常会遇到实现一个接口但只想实现它其中的一个方法,这时可以采用适配器模式。一个实现类可以实现一个或者多个接口,这弥补了java单继承的不足。实现类可以有自己的Field,自己的Method。

public interface Dog {

  void sayHello();

}

public class Jingba implements Dog{

  @Override

  public void sayHello() {

      System.out.println("I'm jingba");

     

  }

}

public class JinMao implements Dog {

  @Override

  public void sayHello() {

      System.out.println("I'm jinmao");

  }

 

}

public class TestInterface {

  public staticvoid main(String[] args){

      Dog dog1 = new Jingba();

      Dog dog2 = new JinMao();

      dog1.sayHello();//I’m jingba

      dog2.sayHello();//I’m jinmao

  }

}


2、接口的Field

接口是一个抽象的模板,模板是不能够被改变的,接口的Field也只能被接口本身所拥有,所以接口的Field都是static和final,不能够被修改且是接口所有的。在java se5之前,创建一组常量(constant)通常是采用接口方式完成,但在java se5以后通常是采用enum来定义常量组。

public interface Months {
    int SPRING = 1;
    int SUMMER = 2;
    int AUTUEM    = 3;
    int WINTER = 4;
}


3、接口实现中的冲突问题

由于java类可以实现多个接口,因此,如果接口中有共同的函数名,但参数类型、返回值类型不同,就会造成冲突。这种冲突应该避免。

4、防止接口被滥用

接口是一个很强大的工具,它可以帮助降低程序与程序之间的耦合性。但是并不是所有的类都需要有接口,是否需要提取出接口还要依据具体情况。

5、接口的继承

一个接口可以继承另一个接口并拥有另一个接口的抽象方法。

public interface animal {

    public void run();

}

public interface Dog extends animal{

    void sayHello();

}

Dog继承了animal之后就拥有了animal的方法 run(),Dog的实现类也必须实现抽象方法run

 

你可能感兴趣的:(java,java,接口)