一:概念

接口是功能的集合。同样可以看做一种数据类型,是比抽象类更为抽象的“类”。

接口描述应该具备的方法,并没有具体的实现。具体实现由接口的实现类(相当于接口的子类来完成)。

好处:

使功能和实现分离,优化了程序设计。

二:语法

使用关键字interface关键字来定义。

定义的接口文件仍然是.java文件。虽然声明的时候使用interface关键字,编译之后仍然是.class

文件。接口我们可以把他看做是一种只包含了功能声明的特殊类。

定义格式:

public   interface   接口名字{

抽象方法1(public abstract 返回值类型 方法名字(参数列表);)

  抽象方法1(public abstract  返回值类型 方法名字(参数列表);)

抽象方法1(public abstract  返回值类型 方法名字(参数列表);)

.......

}

 package com.company;

 public interface Myinterface {
/**
*接口定义:
* 修饰符 interface 接口名字
* 方法的定义:
* public abstract 返回值类型 方法名字 (参数列表)
* 其中 public 修饰符必须是 public 或者不写,不写该方法的访问权限也是public。方法为抽象方法,所以用abstract来修饰.
* 成员的变量的定义:必须是常量且修饰符为public .
*/
public static final int c=22;
public abstract int myinter();
}

注意:

在接口内的方法,必须是public修饰符,以及为抽象方法(abstract)。

三:接口的实现

我们把实现接口的类叫做接口的实现。

 package com.company;

 /**
* 接口的实现语法:
* 使用关键字implements.
* 修饰符 类名字 implements 接口名字{
* public 返回值类型 抽象方法的名字{
* 方法体.
* }
* }
* 类的名字 关键字 接口名字
* public class Myimple implements Myinterface
*/ public class Myimple implements Myinterface {
public int myinter(){
return 2;
};
}

注意:

在接口中默认方法都是抽象的(abstract),不管是否使用public abstract,都一样

抽象的方法重写,修饰符是public  注意访问权限 只能是public.而且是普通方法。(没有abstract,abstract是抽象方法的定义。)

 类是接口的实现,类似于类是接口的子类,接口继承。但是实际上类是接口的实现。

如果接口中有多个抽象方法,实现类需要把接口的抽象方法都一一实现。

接口类的中的抽象方法和接口的成员变量访问权限都是public,写和不写都是这个权限,实现类中的方法的权限也必须是public。否则报错!!!

如果一个实现类中并没有实现接口的所有的抽象方法,如果依然是普通类,会报错,普通类需要实现所有的接口的方法,而实现类变为抽象类就不会报错。也就是说

实现部分接口的抽象方法,实现类是抽象类。

接口:

 package com.company;

 public interface Myinterface {
/**
*接口定义:
* 修饰符 interface 接口名字
* 方法的定义:
* public abstract 返回值类型 方法名字 (参数列表)
* 其中 public 修饰符必须是 public 或者不写,不写该方法的访问权限也是public。方法为抽象方法,所以用abstract来修饰.
* 成员的变量的定义:必须是常量且修饰符为public .
*/
public static final int c=22;
public abstract int myinter();
public abstract void myinter1();
}

实现类:

 public abstract class Myimple  implements Myinterface {
public int myinter(){
return 2;
};
}

调用:

通过初始化实现类对象来调用相应的方法:

 package com.company;

 public class Mytest {
public static void main(String ... arg){
Myimple shixian=new Myimple();
System.out.println(shixian.myinter());
}
}

接口的多实现:

类的继承只能单继承,而接口不一样,可以同实现类实现多个接口,这个也是比抽象类更加灵活。

实现类C可以同时实现接口A和B。

接口A:

 package com.company;

 public interface Myinterface {
/**
*接口定义:
* 修饰符 interface 接口名字
* 方法的定义:
* public abstract 返回值类型 方法名字 (参数列表)
* 其中 public 修饰符必须是 public 或者不写,不写该方法的访问权限也是public。方法为抽象方法,所以用abstract来修饰.
* 成员的变量的定义:必须是常量且修饰符为public .
*/
public static final int c=22;
public abstract int myinter(); }

接口B:

 package com.company;

 public interface Myinterfac_b {
public abstract int myinter();
}

实现C:

 public  class Myimple  implements Myinterface ,Myinterfac_b{
public int myinter(){
return 2;
};
}

因为接口A 和B的抽象方法是一样,所以实现类C可以重写一个类即可。

但是前提:

1:重写方法 返回值一样。如果不一样的话,需要分别实现,不能一起实现。

2:如果方法的参数列表不一样。我们可以重载。

接口A:

 package com.company;

 public interface Myinterface {
/**
*接口定义:
* 修饰符 interface 接口名字
* 方法的定义:
* public abstract 返回值类型 方法名字 (参数列表)
* 其中 public 修饰符必须是 public 或者不写,不写该方法的访问权限也是public。方法为抽象方法,所以用abstract来修饰.
* 成员的变量的定义:必须是常量且修饰符为public .
*/
public static final int c=22;
public abstract int myinter(String a); }

接口B:

 package com.company;

 public interface Myinterfac_b {
public abstract int myinter();
}

实现C:

package com.company;

public class Mytest {
public static void main(String ... arg){
Myimple shixian=new Myimple();
System.out.println(shixian.myinter());
System.out.println(shixian.myinter("ok"));
}
}

注意:

决定方法的差异是方法的签名,方法的签名包含方法的名字和参数!

接口的多继承:

接口可以进行多继承,但是最后子接口,在被实现的时候,需要实现所有父接口的抽象方法。也就是说在java中有多继承的概念。

接口A:

 public interface Myinterface {
/**
*接口定义:
* 修饰符 interface 接口名字
* 方法的定义:
* public abstract 返回值类型 方法名字 (参数列表)
* 其中 public 修饰符必须是 public 或者不写,不写该方法的访问权限也是public。方法为抽象方法,所以用abstract来修饰.
* 成员的变量的定义:必须是常量且修饰符为public .
*/
public static final int c=22;
public abstract int myinter(String a); }

接口B:

 package com.company;

 public interface Myinterfac_b {
public abstract int myinter();
}

接口C:

 package com.company;

 public interface Myinter_c extends Myinterfac_b,Myinterface {
public abstract double myinter_c();
}

实现:

 public  class Myimple  implements Myinter_c{
public int myinter(){
return 2;
}; @Override
public int myinter(String a) {
return 3;
}
public double myinter_c(){
return 4;
}
}

调用:

 package com.company;

 public class Mytest {
public static void main(String ... arg){
Myimple shixian=new Myimple();
System.out.println(shixian.myinter());
System.out.println(shixian.myinter("ok"));
System.out.println(shixian.myinter_c());
}
}

注意:

最后实现:如果实现的C的接口时候,实现类中需要把各个抽象方法都要一一实现。这叫做接口的多继承。

抽象类和接口的区别:

抽象类:是事务共有的功能,但是功能由于具体的对象的不同导致实现内容不一样。

接口:是事务额外的功能,如果事务想具备这个功能,需要定义相应的接口,由实现类来实现。

人的共有的功能:吃和睡觉。但是每个吃什么和怎么睡觉是不一样的。但都属于人的共有的功能。人是否编程功能,不一定,属于人的额外功能。所以吃和睡是抽象,编程是接口。

抽象类:

 package com.company;

 public abstract class Person_t {
public abstract void eat();
public abstract void sleep();
public String work(){
return "make money";
}
}

接口:

 package com.company;

 public interface Per_in {
public abstract void biancheng();
}

实现类和实现抽象类的抽象方法:

 package com.company;

 public class Beav extends  Person_t implements Per_in {
public void eat(){
System.out.println("apple");
}
public void sleep(){
System.out.println("sleep at 500");
}
public void biancheng(){
System.out.println("java");
}
}

调用类:

 package com.company;

 public class Per_Test {
public static void main(String ... args){
Person_t new_Per=new Beav();
new_Per.eat();
new_Per.sleep();
Beav new_be=new Beav();
new_be.biancheng();
}
}

注意:

抽象类中不一定只有抽象方法,也可以有普通方法。抽象类通过子类来调用和实现抽象方法和普通方法。

接口只有抽象方法和常量。没有普通方法。

接口需要实现(implements),抽象方法需要继承(extends),抽象是多态实现,而接口是功能和实现分离。

 接口也可以这么写  接口  变量 =new  子类的构造器();这是接口的多态。

 package com.company;

 public class Per_Test {
public static void main(String ... args){
Person_t new_Per=new Beav();
new_Per.eat();
new_Per.sleep();
Per_in new_be=new Beav();
new_be.biancheng();
}
}

多态是指对象在不同的情形下,对应的类型不同。接口通过实现类来实现多态,类通过继承,子类实现多态。

java 接口的概念的更多相关文章

  1. 网络转载——java接口的概念

    为什么会出现接口? 接口的出现是为了扩展java中的类继承的单调性.这样使得功能更加丰富. 接口关键字? 定义接口interface,实现一个接口  implements 什么接口呢? 接口是一种特殊 ...

  2. JAVA的核心概念:接口(interface)

    JAVA的核心概念:接口(interface) 接口与类属于同一层次,实际上,接口是一种特殊的抽象类. 如:    interface IA{ }  public interface: 公开接口  与 ...

  3. java中接口的概念及使用(补充final修饰符的使用)

    接口 初期理解,可以是一个特殊的抽象类 当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示 class 用于定义类 interface 用于定义接口 接口定义时,格式特点: 1.接口中常见的 ...

  4. Java 基础 面向对象: 接口(interface )概念 以及接口之练习3 -定义一个接口用来实现两个对象的比较并 判断instanceof是否为同类

    接口(interface )概念概念笔记 及测试代码: /** 面向对象: 接口(interface ) 是与类并行的一个概念: * 1.接口可以看成一个特殊的抽象类,它是常量与抽象方法的一个集合 * ...

  5. Java面试基础概念总结

    面向对象软件开发的优点有哪些? 答:开发模块化,更易维护和修改:代码之间可以复用:增强代码的可靠性.灵活性和可理解性. 多态的定义? 答:多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力. ...

  6. Java线程:概念与原理

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  7. OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例

    转自:  http://blog.csdn.net/yanzi1225627/article/details/16917961 开发环境:windows+ADT Bundle+CDT+OpenCV-2 ...

  8. java 接口(基础思想一)

    我想,对于各位使用面向对象编程语言的程序员来说,“接口”这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为程序员,一定经常听到 ...

  9. Java接口的表现形式

    一.概念理解 Java接口是一些方法特征的集合,并没有方法的具体实现,类似于电源插座,可以充不同类型的电器,但是必须适配特定的接口规范.接口是抽象化的,所以其不能被实例化的(不能有构造函数,创建对象) ...

随机推荐

  1. Linux 调试: systemtap

    安装与配置 在ubuntu下直接用apt-get install之后不能正常使用,提示缺少调试信息或者编译探测代码时有问题. 1. 采用官网上的解决方法 2. 可以自己重新编译一次内核,然后再手工编译 ...

  2. 【PyQt5 学习记录】009:批量创建组件并查找

    这里需要在创建组件时使用 setObjectName() 为其添加 objectName 属性,再通过 findChild() 或者 findChildren() 函数来查找. 举个栗子,批量创建10 ...

  3. 纯web实现游记类手机端应用

    初衷 当初的一个学习框架项目,采用sui框架实现的一套手机端页面.今天清理github的时候重新整理了一下,因为设计的确实不错嘛,拿出来大家一起学习...哈哈 说明 采用sui框架 纯html/css ...

  4. java应用破解之破解 jeb mips 2.3.3

    前言 jeb 的新版支持 mips的反编译 ,于是去官网申请一个试用版,试用版的限制还是比较多的,比如 使用时间验证,没法复制粘贴 等,于是想尝试看看能否破解,同时填了 java破解 这个坑. 修改版 ...

  5. Python这个缩进让我焦头烂额!最奇葩的缩进...

        例如如下程序.     运行上面代码,如果输入年龄小于20,将会看到如下运行结果.     从上面代码可以看出,如果输入的年龄大于20,则程序会执行整体缩进的代码块. 再次重复:Python不 ...

  6. Linux Windows平台添加pip源

    直接应用 pip3 install django -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com​ ...

  7. 风险管理,未雨绸缪——《代码之殇》读书笔记II

    这次的内容主要是关于软件开发过程中的风险管理,包括项目用时估计.产品的发布与更新.承诺兑现的重要性. ①项目用时估计 有人会质疑项目用时估计的可靠性,因为就事而言,这次的任务可能和上次不一样了,开发环 ...

  8. eclipse安装python

    在Eclipse中安装pydev插件 启动Eclipse, 点击Help->Install New Software...   在弹出的对话框中,点Add 按钮.  Name中填:Pydev,  ...

  9. 6.HTML速查模块

    1.HTML 基本文档 <!DOCTYPE html> <html> <head> <title>文档标题</title> </hea ...

  10. phantomJs页面截图

    因为phantomjs使用了一个真正的渲染引擎WebKit,它能截取一个web页面的真实影像,这是因为phantomjs能够折射出WEB页面上的任何东西,包括html,css,svg和Canvas等. ...