百度是这么说的:

  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. Spring和Quartz集成

    本文转载自:http://blog.csdn.net/u010648555/article/details/54891264 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企 ...

  2. poj 2229 Sumsets(dp)

    Sumsets Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 400000/200000K (Java/Other) Total Sub ...

  3. Unity3D SerialPort处理

    using UnityEngine; using System.Collections; using System; using System.Threading; using System.Coll ...

  4. xgboost的遗传算法调参

    遗传算法适应度的选择: 机器学习的适应度可以是任何性能指标 —准确度,精确度,召回率,F1分数等等.根据适应度值,我们选择表现最佳的父母(“适者生存”),作为幸存的种群. 交配: 存活下来的群体中的父 ...

  5. git 上传本地代码到github 服务器

    git init git add . (所有文件用 点表示) git commit -m "注释语句" git remote add origin https://github.c ...

  6. spark 应用程序部署工具 spark-submit

    打包 Spark application 使用spark-submit启动Spark application spark-submit usage spark-submit option 运行模式相关 ...

  7. android官方文档翻译(不断更新中。。。)

    最近在自学android,抽空把官方文档的guide跟training差不多看了一遍,又对比了一些书籍,感觉还是官方文档讲得比较好,所以自己计划把官方文档翻译一下,方便自己的知识巩固以及复习查找,由于 ...

  8. Java基本类型与运算

    问题及答案来源自<Java程序员面试笔试宝典>第四章 Java基础知识 4.4基本类型与运算 1.Java提供了哪些基本数据类型? Java一共提高了八种原始的数据类型:byte.shor ...

  9. convolution-卷积神经网络

    训练mnist数据集 结构组成: input_image --> convolution1 --> pool1 --> convolution2 --> pool2 --> ...

  10. 46. linux下解压.tar.gz文件

    tar -zxvf jdk-7u55-linux-i586.tar.gz 步骤二:解压jdk-7u55-linux-i586.tar.gz ,执行以下命令: #mkdir /usr/local/jav ...