Interface, 接口的实现初解

百度是这么说的:

  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();
时间: 2024-11-03 05:37:34

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

Interface接口的设置是由其他模块决定的

描述:我写了个登陆器   无非就是登陆和注册这2个功能,当然还有一个验证码功能 根据职责性,我登陆器不涉及任何用户有关操作. 但我需要规定用户模型必须有以下几个功能,我登陆器才能使用,登陆.注册.根据名字获取用户的个人信息. 所以我设置如下 <?php interface IMember {    /**   * 根据用户名获取用户信息 用户名不指定可以是邮箱.昵称或者手机号码   * @param String $username   */  public function getOneMem

java====interface接口

package cn.china; abstract class AbsDemo{ abstract void show1(); abstract void show2(); } /** *当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用 *另一种形式定义和表示,就是 接口 interface * *定义接口使用的关键字不是class,是interface. **/ interface Demo5{ public static final int NUMBER=4; public abs

Java知多少(39)interface接口

在抽象类中,可以包含一个或多个抽象方法:但在接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加“抽象”. 接口使用 interface 关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不是规定它如何去做. 现实中也有很多接口的实例,比如说串口电脑硬盘,Serial ATA委员会指定了Serial ATA 2.0规范,这种规范就是接口.Serial ATA委员会不负责生产硬盘,只是指定通用的规范. 希捷.日立.三星等生产厂家会按照规范生产符合

as3.0 interface接口使用方法

[转]as3.0 interface接口使用方法 AS在2.0的时候就支持接口了 接口能够让你的程序更具扩展性和灵活性,打个例如 比方你定义了一个方法 代码: public function aMethod(arg:MyClass):void { .....} 參数 arg 的类型必须是 MyClass,由于我们须要在该方法中使用MyClass的API 而MyClass是一个类的话,你传入的对象必须是MyClass类的实例或者是MyClass子类的对象,可是当你要传入的一个对象,他既不是MyCl

golang中interface接口的深度解析

什么是interface,简单的说,interface是一组method的组合,下面这篇文章主要给大家深度解析了关于golang中的interface接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. 一 接口介绍 如果说gorountine和channel是支撑起Go语言的并发模型的基石,让Go语言在如今集群化与多核化的时代成为一道亮丽的风景,那么接口是Go语言整个类型系列的基石,让Go语言在基础编程哲学的探索上达到前所

Interface接口

一.接口及作用 接口是一个非常重要的概念,理解这个,先举一个实现生活中的实例. 现在,电脑主板,有很多插槽,可用来插CPU.内存等.当CPU等元件需要更新换代升级时,只要将CPU单独更换就可以了,而不需要更换主板.其实,主板上的这些暴露在外的插槽,就可以理解为接口. 接口就是对外暴露的规则,只要符合规则的CPU.内存,不论品牌.型号.规格,都可以安插使用. 接口是程序的功能扩展.有了插槽,也就提高了主板的功能扩展性,比如内存不够用了,我们就可以换成内容最大的内存条,或再加新的内存条. 接口降低了

Adapter适配器中通过Interface接口响应回调

//回调接口 public interface BottomCallBackInterface {     public interface OnBottomClickListener {         void onBottomClick(View v, int position);     } } //适配器中引用该方法 private OnBottomClickListener mListener; public WaitTakingAdapter(Context context, Li

【Java面试题】13 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

1.什么是匿名内部类? 内部类,存在于另一个类内部的类,而匿名内部类,顾名思义,就是没有名字的内部类. 2.为什么需要匿名内部类? 每个inner class都能够各自继承某一实现类(implementation).因此,inner class不受限于outer class是否已继承自某一实现类. 如果少了inner class所提供的"继承自多个具象(concrete)或抽象(abstract)类"的能力,设计上和编程上的某些问题会变得十分棘手. 所以,从某个角度来看inner cl

C#之interface接口

C#中接口与抽象类很相似,他们都无法实例化自己的对象,但是他们也有很重要的区别.Interface与Abstract class中,类不能多重继承,但是接口可以多重继承. 这段代码表明,声明接口的方法和继承接口之后要实现里面的未定义的方法 另外,一个类还可以继承多个接口,那样就要把接口中的所有函数都重新实现一次. 接口也可以实现扩展,这样可以是之前定义的接口重新得到使用.如下: 这样就可以通过ISorableAdd而不用再用ISorable来在类中继承了. 接口的多态(Polymorphism