Java基础——接口

一:接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。

封装与接口中,private关键字封装了对象的内部成员。经过封装,产品隐藏了内部细节,只提供给用户接口(interface)。

接口是非常有用的概念,可以辅助我们的抽象思考。在现实生活中,当我们想起某个用具的时候,往往想到的是该用具的功能性接口。比如杯子,我们想到加水和喝水的可能性,高于想到杯子的材质和价格。也就是说,一定程度上,用具的接口等同于用具本身。内部细节则在思考过程中被摒弃。

在public和private的封装机制,我们实际上同时定义了类和接口,类和接口混合在一起。Java还提供了interface这一语法。这一语法将接口从类的具体定义中剥离出来,构成一个独立的主体。


二:

interface

语法:

  1. interface 接口名{ }

以杯子为例,定义一个杯子的接口:

interface Cup {
    void addWater(int w);
    void drinkWater(int w);
}

Cup这个interface中定义了两个方法的原型(stereotype): addWater()和drinkWater()。一个方法的原型规定了方法名,参数列表和返回类型。原型可以告诉外部如何使用这些方法。

在interface中,

  • 不需要定义方法的主体
  • 不需要说明方法的可见性

三:接口使用 ?

? 使用 implements 关键字实现接口 ?

语法

  1. class 类名 implements 接口名{ }

注意:

  1. 一个类的public方法构成了接口。所以,所有出现在interface中的方法都默认为public。
  2. 接口不能实例化,使用接口时需要子类实现接口
  3. 接口的实现 ? 一个实现接口的类,必须实现接口内所有的方法,否则该类就必须声明为抽象类

我们可以在一个类的定义中实施接口,比如下面的MusicCup (可以播放音乐的杯子):

class MusicCup implements Cup
{
    public void addWater(int w)
    {
        this.water = this.water + w;
    }

    public void drinkWater(int w)
    {
        this.water = this.water - w;
    }

    private int water = 0;
}

我们用implements关键字来实施interface。一旦在类中实施了某个interface,必须在该类中定义interface的所有方法(addWater()和drinkWater())。类中的方法需要与interface中的方法原型相符。否则,Java将报错。

在类中可以定义interface没有提及的其他public方法。也就是说,interface规定一个必须要实施的最小接口。比如下面的waterContent()方法就没有在Cup接口中规定原型:

class MusicCup implements Cup
{
    public void addWater(int w)
    {
        this.water = this.water + w;
    }

    public void drinkWater(int w)
    {
        this.water = this.water - w;
    }

    public int waterContent()
    {
        return this.water;
    }

    private int water = 0;
}


四:分离接口的意义

我们使用了interface,但这个interface并没有减少我们定义类时的工作量。我们依然要像之前一样,具体的编写类。我们甚至于要更加小心,不能违反了interface的规定。既然如此,我们为什么要使用interface呢?

事实上,interface就像是行业标准。一个工厂(类)可以采纳行业标准 (implement interface),也可以不采纳行业标准。但是,一个采纳了行业标准的产品将有下面的好处:

  • 更高质量: 没有加水功能的杯子不符合标准。
  • 更容易推广: 正如电脑上的USB接口一样,下游产品可以更容易衔接。

如果我们已经有一个Java程序,用于处理符合Cup接口的对象,比如领小朋友喝水。那么,只要我们确定,我们给小朋友的杯子(对象)实施了Cup接口,就可以确保小朋友可以执行喝水这个动作了。至于这个杯子(对象)是如何具体定义喝水这个动作的,我们就可以留给相应的类自行决定 (比如用吸管喝水,或者开一个小口喝水)。

在计算机科学中,接口是很重要的概念。比如任何提供UNIX接口的操作系统都可以称作UNIX系统。Linux,Mac OS,Solaris都是UNIX系统,它们提供相似的接口。但是,各个系统的具体实施(源代码)互不相同。Linux是开源的,你可以查看它的每一行代码,但你还是不知道如何去编写一个Solaris系统。


五:实施多个接口

一个类可以实施不止一个的interface。比如我们有下面一个interface:

interface MusicPlayer {
    void play();
}

我们再来考虑MusicCup类。MusicCup可以看做播放器和杯子的混合体。

所以MusicCup应该具备两套接口,即同时实施MusicPlayer接口和Cup接口:

class MusicCup implements MusicPlayer, Cup
{
    public void addWater(int w)
    {
        this.water = this.water + w;
    }

    public void drinkWater(int w)
    {
        this.water = this.water - w;
    }

    public void play()
    {
        System.out.println("la...la...la");
    }
    private int water = 0;
}

  


六.抽象类和接口的区别

  1)抽象类可以提供成员方法的实现细节,而接口中的方法只能是抽象方法,默认修饰 符 public abstract?

  2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是常量,默认的修饰符 public static final
?

  3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

  4)一个类只能继承一个抽象类,而接口主要目的是扩展功能,没有具体存在接口的多实现了,一个类却可以实现多个接口。

注意:

任何类都可以直接访问到接口中的常量


七:总结

1、 抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。

2、 在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的成员数据(不过一般都不在接口中定义成员数据),而且它的所有方法都是抽象的。

3、抽象类和接口所反映的设计理念是不同的,抽象类所代表的是“is-a”的关系,而接口所代表的是“like-a”的关系。

抽象类和接口是java语言中两种不同的抽象概念,他们的存在对多态提供了非常好的支持,虽然他们之间存在很大的相似性。但是对于他们的选择往往反应了您对问题域的理解。只有对问题域的本质有良好的理解,才能做出正确、合理的设计。

原文地址:https://www.cnblogs.com/huan-guo/p/8384362.html

时间: 2024-10-10 14:48:02

Java基础——接口的相关文章

JAVA基础接口集合框架

接口--------------------------------------------------------------------------------一.接口(是一种规范)1.接口名/接口文件与类类似,也是用.java文件编写2.关键字 interface 接口名命名规范与类名相同 习惯上可以使用I开头表示3. 接口额访问修饰符只能使用public和default修饰不能使用private和protected在接口中默认缺省为public4.接口中的所有属性只能为公开的静态的常量而

java基础--接口与反射总结

一.接口 接口中所有的方法默认public static final,不必再写. 接口中可以定义常量,但不能含有实例域.在java SE8之前,不能在接口中实现方法. 一个类可以实现多个方法implements 接口1,接口2...多个接口之间用","隔开. 克隆:要实现克隆先实现Cloneable接口,重新定义clone方法,并指定public修饰符. 默认clone是浅克隆,要实现深克隆需要自己重写clone. 所有的数组类型都有一个public的clone方法. 二.反射 概念:

Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,

36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,该抽象类中有个“安 全生产”的抽象方法:abstract void safetyInProduction() (

java基础 接口练习

1.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法voidprintCapitalLetter():在接口InterfaceB中有个方法void printLowercaseLetter():然后写一个类Print实现接InterfaceA和InterfaceB,要求printCapitalLetter()方法实现输出大写英文字母表的功能,printLowercaseLetter()方法实现输出小写英文字母表的功能.再写一个主类E,在主类E的mai

java基础接口练习

1.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法voidprintCapitalLetter():在接口InterfaceB中有个方法void printLowercaseLetter():然后写一个类Print实现接口InterfaceA和InterfaceB,要求printCapitalLetter()方法实现输出大写英文字母表的功能,printLowercaseLetter()方法实现输出小写英文字母表的功能.再写一个主类E,在主类E的ma

java基础接口回调的实现

//接口回调理解:先创建好接口,需要使用的时候用匿名内部类实现接口,就叫接口回调,以下是我设计的程序. package callback; import java.util.ArrayList; import java.util.List; import java.util.Scanner; //接口 package callback; public interface CallPhone { public void playPhone(); } //PhoneNum类 package call

JAVA 基础 接口

抽象类和抽象方法 抽象方法 在面向对象编程语言中抽象方法指一些只有方法声明而没有具体方法体的方法抽象方法一般存在于抽象类或接口中. java中,抽象方法就是以 abstract 修饰的方法,只需要声明而不需要实现 abstract void f(); 抽象类 包含抽象方法的类叫抽象类. abstract class Sample {     private int param1;     abstract void f1();     void f2() {} } 注: 1.如果一个类包含有抽象

java基础---接口(二)

1.为什么使用接口 防盗门可以继承门的同时又继承锁吗?不可以 如何解决这个问题,接口 2.什么是接口 语法 public interface MyInterface { public void foo(): //其他方法 } 3.接口特性 1.接口丌可以被实例化 2.实现类必须实现接口的所有方法 3.实现类可以实现多个接口 4.接口中的变量都是静态常量 5.接口中的方法都是抽象方法 Java单继承多实现 4.如何使用接口 用Java接口来实现 1.根据需求设计方法 2.实现所有方法 3.用多态的

java基础 接口私有方法

1 /** 2 * 问题描述: 3 * 我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题 4 * 但是这个共有方法不应该让实现类使用,应该是私有化的. 5 * 6 * 解决方案: 7 * 从java 9开始,接口当中允许定义私有方法. 8 * 1.普通私有方法,解决多个默认方法之间重复代码问题 9 * 格式: 10 * private 返回值类型方法名称(参数列表){ 11 * 方法体 12 * } 13 * 2.静态私有方法,解决多个静态方法之间重复代码的问题 14 * 格式: