我就不吃芹菜

导航

 

百度是这么说的:

  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();

 

posted on 2016-01-22 15:03  我就不吃芹菜  阅读(306)  评论(0编辑  收藏  举报