百度是这么说的:

  Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
  两种含义:
    一,Java接口,Java语言中存在的结构,有特定的语法和结构;
    二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
用代码来解释什么叫接口, 需要建很多才能解释清楚了, 简单整理了一下
 
首先定义几个接口
public interface I_cpu {
public void yunsuan();
public String getPinpai();
}
public interface I_display {
public void xianshi();
public String getPinpai();
}
public interface I_longx extends I_cpu, I_display {
public void cunchu();
public String yingpan = null;
public String yingpan();
}

上面定义了三个接口, 用组装电脑来简单举个例子, 在写接口的时候要注意以下几点(非常重要)

1, 接口中只需要写方法或者属性, 方法不需要写方法体, 只需要写个public void yunsuan();这玩意就行了, 方法体在后面实体类里面写

2, 接口中定义的方法, 只能使用public和abstract来修饰, 不能使用private或是protect

3, 接口中可以定义属性, 但是定义的属性会默认有这几个关键字——Public, Final, Abstract

4, 接口中定义的属性,必须初始化, 就是必须赋初始值

5, 如果一个类引用了两个或者多个接口, 必须包含所引用接口的所有属性和方法

下面是定义的三个类, 这三个类分别是继承了接口; 继承了两个接口, 继承了一个接口, 但是这个接口又继承了两个接口:

public class Intel implements I_cpu {
@Override
public void yunsuan() {
// TODO Auto-generated method stub
System.out.println("Intel正在运算...");
}
@Override
public String getPinpai() {
return "Intel";
}
}
public class AMD_Display implements I_cpu, I_display {
@Override
public void xianshi() {
System.out.println("显示图形图像");
}
@Override
public void yunsuan() {
System.out.println("带显卡的CPU正在运算...");
}
@Override
public String getPinpai() {
return "CPU&DISPLAY";
}
}
public class Longxin implements I_longx {
@Override
public void yunsuan() {
System.out.println("龙芯正在运算...");
}
@Override
public String getPinpai() {
return "龙芯";
}
@Override
public void xianshi() {
System.out.println("show picture");
}
@Override
public void cunchu() {
System.out.println("save data");
}
@Override
public String yingpan() {
return "冠捷硬盘";
}
}

这样再写一个实现类, 就可以使用这些类和接口了

public class Run {
//实现通过接口定义的方法
public static void main(String[] args) {
//组装第一台电脑
Computer c1 = new Computer();
Intel cpu = new Intel();
c1.setCpu(cpu);
//直接实例化赋值的叫匿名对象
c1.setDisplay(new Display());
c1.run();
System.out.println();
//组装第二台电脑
Computer c2 = new Computer();
c2.setCpu(new AMD());
c2.setDisplay(new Display());
c2.run();
System.out.println();
//组装第三台电脑
Computer c3 = new Computer();
c3.setAd(new AMD_Display());
c3.setLx(new Longxin());
c3.Run();
}
}

抽象类和抽象方法

在定义类的过程中难免会遇到一种情况, 一个类里面有一个方法没法实现, 但是这个方法又不能舍弃, 这时候就可以使用抽象方法(abstract)

public abstract class Longxin implements I_longx {
......
public abstract void xianshi();
......
}

注意: 在一个类里面, 如果有一个方法变成了抽象方法, 那么这个类也必须定义成抽象类(即加上关键字abstract)

这个抽象类再使用的时候就要用另一个类来继承它, 在另一个类里面定义这个抽象方法的方法体

public class Longxin2 extends Longxin {
@Override
public void xianshi() {
System.out.println("Longxin2的xianshi方法");
}
}

实现类中的代码改成这样, 重新实例化Longxin类, 就可以正常调用方法了

        Computer c3 = new Computer();
Longxin lx = new Longxin2();
c3.setLx(lx);
c3.Run();

Interface, 接口的实现初解的更多相关文章

  1. as3.0 interface接口使用方法

    [转]as3.0 interface接口使用方法 AS在2.0的时候就支持接口了 接口能够让你的程序更具扩展性和灵活性,打个例如 比方你定义了一个方法 代码: public function aMet ...

  2. interface接口

    当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示,就是接口 interface. 定义接口使用的关键字不是class,是interface.接口中常见的成员: 这些成员都有 ...

  3. golang面向对象和interface接口

    一. golang面向对象介绍 1.golang也支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.2.golang没有类(class),golang语言的结合体(struc ...

  4. Golang 入门系列(四)如何理解interface接口

    前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友,可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category ...

  5. go interface接口

    一:接口概要 接口是一种重要的类型,他是一组确定的方法集合. 一个接口变量可以存储任何实现了接口方法的具体值.一个重要的例子就是io.Reader和io.Writer type Reader inte ...

  6. java interface接口的传值方法

    A 类 package interface_test; public class A { private IPresenter ip; public A(IPresenter ip) { this.i ...

  7. JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac

    记录一下: 构造器[构造函数]: 在java中如果用户编写类的时候没有提供构造函数,那么编译器会自动提供一个默认构造函数.它会把所有的实例字段设置为默认值:所有的数字变量初始化为0;所有的布尔变量设置 ...

  8. 011-对象——interface接口说明与使用方式实例

    <?php /** interface接口说明与使用方式实例 * * 接口里面的方法全是抽象方法,没有实体的方法.这样的类我们就叫做接口.定义的时候用Interface定义.实现接口时用impl ...

  9. Java Interface接口

    Java 中接口概念 接口可以理解为一种特殊的 类,由 全局常量 和 公共的抽象方法 所组成. 类是一种具体实现体,而接口定义了某一批类所需要遵循的规范,接口不关心这些类的内部数据, 也不关心这些类里 ...

随机推荐

  1. VS编译时使用/去除NuGet管理库

    原文链接:VS编译时自动下载NuGet管理的库 之前一直使用NuGet来管理一些第三方的库,但是每次check in代码时候为了保证编译通过,都需要把对应的packages check in. 比较耗 ...

  2. ThinkJava-容器深入研究

    第17章 容器深入研究 17.2 填充容器 package com.cy.container; import java.util.*; class StringAddress { private St ...

  3. ThinkJava-持有对象

    11.3 添加一组元素 在java.util包中的Arrays和Collection类中都有很多实用方讼,可以在一个Collection中添加 一组元素.Arrays.asList()方法接受一个数组 ...

  4. orace学习操作(4)

    Orace游标: 一.游标简介: 使用游标,我们可以对具体操作数据,比如查询的结果,对行,列数据进行更加细致的处理.以及对其他DML操作进行判断等操作: 二.显示游标: 1.静态的指定变量类型: SQ ...

  5. sentinel服务器出现大量的连接问题【转载】

    一.问题现象 redis服务端的sentinel模块存在大量的established状态的连接,并且这些连接一直不被释放,而客户端的连接数正常. 二.问题排查过程 1.根据连接状态进行推断 服务端存在 ...

  6. Maven 配置tomcat插件

    使用tomcat插件来访问maven 1 先下载tomcat插件(在pom中配置) <!-- 配置Tomcat插件 --> <plugin> <groupId>or ...

  7. Fork/Join编程模型

    1.一种并行计算的多线程编程模型 2.开始--任务分割--多线程异步执行---任务合并--阻塞等待合并结果.(分治算法) 3.work-stealing算法: 每个线程维护一个各自的双端的链表,有新任 ...

  8. Java平台与内存管理

    问题及答案来源自<Java程序员面试笔试宝典>第四章 Java基础知识 4.8Java平台与内存管理 1.为什么说Java是平台独立性语言? 平台独立性是指可以在一个平台上编写和编译程序, ...

  9. HTML|CSS之CSS选择器及样式

    知识内容: 1.CSS选择器 2.CSS常用样式 参考:http://www.cnblogs.com/yuanchenqi/articles/5977825.html 一.CSS选择器 1.基础选择器 ...

  10. 10. 数据模型(ER图)转为sql脚本,要求导出的字段都是大写的

    1.进入Tools-->Execute Commands-->Edit/Run Script,执行以下脚本即可实现所有字段转为大写; Option Explicit ValidationM ...