Java深入解析接口interface

目录
  • 1.接口定义
    • 示例
  • 2.接口细节01
    • 示例
  • 3.接口细节02
  • 4.接口细节03
  • 5.接口多态特性

1.接口定义

基本介绍

接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些 方法写出来。

语法

interface 接口名{
//属性
1方法
}
接口

•class 类名 implements 接口{
自己属性;
自己方法;
必须实现的接口的抽象方法
}

示例

inerface01.java

package com.demo.Interface_;
public class inerface01 {
    public static void main(String[] args) {
        //创建手机相机对象
        camera c1=new camera();
        phone p1=new phone();
        //创建电脑对象
        computer cc=new computer();
        //相机工作
        cc.work(c1);
        //手机工作
        cc.work(p1);
    }
}

usb.java

package com.demo.Interface_;
public interface usb {//接口
    //规定接口的相关方法
    public void start();
    public void end();
}

computer.java

package com.demo.Interface_;
public class computer {
    //编写一个方法
    public void work(usb it){
        //通过接口调用方法
        it.start();
        it.end();
    }
}

camera.java

package com.demo.Interface_;
//相机实现接口usb
public class camera implements usb{
    @Override
    public void start() {
        System.out.println("相机开始了工作");
    }
    @Override
    public void end() {
        System.out.println("相机停止了工作");
    }
}

phone.java

package com.demo.Interface_;
//phone类实现usb接口中的方法
public class phone implements usb{
    @Override
    public void start() {
        System.out.println("手机开始了工作");
    }
    @Override
    public void end() {
        System.out.println("手机停止了工作");
    }
}

测试结果

2.接口细节01

1.在jdk7.0之前,接口里所有有的方法都没有方法体,都是抽象方法、.

2.jdk8.0后接口可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现

示例

Ainter.java

package com.demo.Interface_;
public interface Ainter {//接口
    //写属性
    public int n1=999;
    //写方法
    public void hi();//抽象方法abstract可也可不写
//    1.在jdk7.0之前,接口里所有有的方法都没有方法体,都是抽象方法、.
//    2.jdk8.0后接口可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现
//    3.但需要defaul关键字修饰;
    default public void ok(){
        System.out.println("ok.....");
    }
    //jdk8后,可以有静态方法
    public static void cry(){
        System.out.println("cry.....");
    }
}

interface02.java

public class interface02 {
    public static void main(String[] args) {
        A a = new A();
        a.hi();
        a.ok();
        a.cry();
    }
}
//如果一个类连接了接口,需要将接口中的方法全都实现
class A implements Ainter{
    public void hi(){
        System.out.println("hi.....");
    };
     public void ok(){
        System.out.println("ok.....");
    }
    //jdk8后,可以有静态方法
    public static void cry(){
        System.out.println("cry.....");
    }
}

测试结果

3.接口细节02

•注意事项和细节

1)接口不能被实例化

2)接口中所有的方法是 public方法,接口中抽象方法,可以不用abstract 修 饰

3)一个普通类实现接口,就必须将该接口的所有方法都实现。

4)抽象类实现接口,可以不用实现接口的方法。

interface_detial.java

package com.demo.Interface_;
public class interface_detial {
    public static void main(String[] args) {
//        1)接口不能被实例化
        //new IA();ERROR
    }
}
interface IA{
    //2)接口中所有的方法是 public方法,接口中抽象方法,可以不用abstract 修饰
    void say();//public 和 abstract可写可不写
    void kk();
}
//        3)一个普通类实现接口,就必须将该接口的所有方法都实现。
class cat implements IA{
    @Override
    public void say() {
        System.out.println("say.......");
    }
    @Override
    public void kk() {
        System.out.println("kk/.......");
    }
}
//        4)抽象类实现接口,可以不用实现接口的方法。
abstract class dog implements IA{
}

4.接口细节03

接口

5)一个类同时可以实现多个接口

6)接口中的属性,只能是final的,而且是 public static final 修饰符。比如: int a=1;实际上是 public static final int a=1;(必须初始化)

(7)接口中属性的访问形式:接口名.属性名

8)一个接口不能继承其它的类,但是可以继承多个别的接口[举例] interface A extends B,C{}

9)接口的修饰符只能是 public 和默认,这点和类的修饰符是一样的。

示例interfacedetial02

package com.demo.Interface_;
public class interfacedetial {
    public static void main(String[] args) {
        //证明int n1=55;//等价于 public static final int n1=55;
        System.out.println("IB.n1="+IB.n1);//说明n1是static;
        //IB.n1=60;ERROR,说明n1是final
        N G = new N();
        System.out.println("G.n="+G.n);
        System.out.println("M.n="+M.n);
        System.out.println("N.n="+N.n);
    }
}
//5)一个类同时可以实现多个接口。
interface IB{
    int n1=55;//等价于 public static final int n1=55;
    void aa();
}
interface IC{
    void bb();
}
// 8)一个接口不能继承其它的类,但是可以继承多个别的接口[举例]
interface ID extends IB,IC{
}
class pp implements IB,IC{
    @Override
    public void aa() {
        System.out.println("aa....");
    }
    @Override
    public void bb() {
        System.out.println("bb...");
    }
}
// 6)接口中的属性,只能是final的,而且是 public static final 修饰符。比如:
//  int a=1;实际上是 public static final int a=1;(必须初始化)
//(7)接口中属性的访问形式:接口名.属性名
// 9)接口的修饰符只能是 public 和默认,这点和类的修饰符是一样的。
interface M{
    int n=66;
}
class N implements M{
}

测试结果

5.接口多态特性

•接口的多态特性

1)多态参数(前面案例体现) 在前面的Usb接口案例,Usb usb,既可以接收手机对象,又可以接收相机对象,就体现了接口多态(接口引用可以指向实现了接口的类的对象)

2)多态数组 : 演示一个案例:给Usb数组中,存放 Phone 和相机对象,Phone类还有一个特有的方法call()请遍历Usb数组,如果是Phone对象,除了调用Usb 接口定义的方法外,还需要调用Phone 特有方法 call.

3)接口存在多态传递现象.

interfacePoly.java

package com.demo.Interface_;
public class interfacePoly {
    public static void main(String[] args) {
        //接口的多态体现
        //接口类型的变量可以指向实现了IF接口的对象实例
        IF if01=new QQ();
        if01 =new WW();
        //继承的多态体现
        //父类类型的变量可以指向继承了AAA的对象实例
        AAA t=new BBB();
        t=new CCC();
    }
}
interface IF{}
class QQ implements IF{}
class WW implements IF{}
class AAA{
}
class BBB extends AAA{
}
class CCC extends AAA{
}

interfacePolyarr.java

package com.demo.Interface_;
public class interfacePolyarr {
    public static void main(String[] args) {
        //多态数组-》接口类型数组
        usbb []uu=new usbb[2];
        uu[0]=new ppp();
        uu[1]=new ttt();
        /*
        给Usb数组中,存放 Phone 和相机对象,Phone类还有一个特有的方法call()请遍历Usb数组,
        如果是Phone对象,
        除了调用Usb 接口定义的方法外,还需要调用Phone 特有方法 call.
         */
        for(int i=0;i<uu.length;i++){
            uu[i].work();//动态绑定
            //要使用call方法,需要用到线下转型
            if(uu[i] instanceof ppp){
                ((ppp)uu[i]).call();
            }
        }
    }
}
interface usbb{
    void work();
}
class ppp implements usbb{
    public void call(){
        System.out.println("ppp........");
    }
    @Override
    public void work() {
        System.out.println("ppp在工作中");
    }
}
class ttt implements usbb{
    @Override
    public void work() {
        System.out.println("ttt工作中");
    }
}

测试结果

到此这篇关于Java深入解析接口interface的文章就介绍到这了,更多相关Java接口 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java中的interface接口实例详解

     java中的interface接口实例详解 接口:Java接口是一些方法表征的集合,但是却不会在接口里实现具体的方法. java接口的特点如下: 1.java接口不能被实例化 2.java接口中声明的成员自动被设置为public,所以不存在private成员 3.java接口中不能出现方法的具体实现. 4.实现某个接口就必须要实现里面定义的所有方法. 接下来看一个实现接口的案例: package hello;   interface competer{ //定义接口 void set_comp

  • java interface 接口的使用好处分析

    本文实例讲述了java  interface 接口的使用优点.分享给大家供大家参考,具体如下: 接口interface 的作用是什么? 假设在以前我们开发了某个业务的实现类Demo1,现在根据需求我们需要重新设计该业务的实现类Demo2且不能影响其它业务的运行. 这时候就需要一个标准,一个针对该业务实现的一个标准接口(standard interface).而所有实现该接口(interface)的类都需要去实现该接口的方法.通过java向上转型实现针对不同的业务有不同类的实现. 注释: 1.in

  • java中接口(interface)及使用方法示例

    1.接口:一种把类抽象的更彻底,接口里只能包含抽象方法的"特殊类".接口不关心类的内部状态数据,定义的是一批类所遵守的规范.(它只规定这批类里必须提供某些方法,提供这些方法就可以满足实际要求). 在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念.类描述对象的属性和方法.接口则包含类要实现的方法. 除非实现接口的类是抽象类,否则该类

  • 深入解析Java接口(interface)的使用

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

  • 关于Java Interface接口的简单练习题

    目录 一.问题描述 二.解决方案 三.代码清单 本文转自微信公众号:"算法与编程之美" 一.问题描述 1) 定义接口Printx,其中包括一个方法printMyWay() ,这个方法没有形参,返回值为空. 2) 编写矩形类Rectangle,矩形类要求实现Printx接口,有求面积.求周长的方法,printMyWay()方法要能显示矩形的边长.面积和周长. 3) 编写正方形类作为矩形类的子类,正方形类继承了矩形类求面积和周长的方法,新增加求对角线长的方法,重写printMyWay()方

  • 详解java接口(interface)在不同JDK版本中的变化

    JDK1.7以及以前: 接口(interface)在JDK7及之前的版本对接口的要求: 接口定义: 使用 interface 关键字 . 接口中的 所有 成员变量 都默认是由 public static final 修饰的. 接口中的 所有方法 都默认是由 public abstract 修饰的.也可以使用 protected ,但不能用 private . 接口中的 所有方法 都没有方法体. 接口没有构造方法.因为构造方法用于创建对象. 实现接口的类 必须提供接口中所有方法的具体实现内容. 可

  • Java深入解析接口interface

    目录 1.接口定义 示例 2.接口细节01 示例 3.接口细节02 4.接口细节03 5.接口多态特性 1.接口定义 基本介绍 接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些 方法写出来. 语法 interface 接口名{//属性1方法}接口 •class 类名 implements 接口{自己属性:自己方法:必须实现的接口的抽象方法} 示例 inerface01.java package com.demo.Interface_; public clas

  • Java枚举类接口实例原理解析

    这篇文章主要介绍了Java枚举类接口实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 枚举类可以实现一个或多个接口.与普通类实现接口完全一样,枚举类实现接口时,需要实现该接口所包含的方法. 如果需要每个枚举值在调用同一个方法时呈现不同的行为,则可以让每个枚举值在{...}匿名块中实现自己的业务逻辑. public interface IGradeHandler { String getGrade(String studentName)

  • Java 深入浅出解析面向对象之抽象类和接口

    目录 抽象类 声明抽象类 声明抽象方法 案例 使用规则 接口 声明接口 案例 接口特性 抽象类和接口的区别 抽象类 java语言,声明类时 abstract class Db{} 说明Db类为抽象类. java语言中,抽象方法是说没有方法的实现(方法体)此方法为抽象方法,只有抽象类和接口中才可以有抽象方法. 声明抽象类 声明抽象类很简单,加个abstract关节字就行. public abstract class AA { } 声明抽象方法 在抽象类中声明一个抽象方法,抽象方法没有方法体,就是说

  • 深入解析Java编程中接口的运用

    接口的本质--接口是一种特殊的抽象类,这种抽象类里面只包含常量和方法的定义,而没有变量和方法的实现. 抽象类所具有的一些东西接口可以具有,假如一个抽象类里面所有的方法全都是抽象的,没有任何一个方法需要这个抽象类去实现,并且这个抽象类里面所有的变量都是静态(static)变量,都是不能改变(final)的变量,这时可以把这样的抽象类定义为一个接口(interface).把一个类定义成一个接口的格式是把声明类的关键字class用声明接口的关键字interface替换掉即可. 接口(interface

  • 在JavaScript中调用Java类和接口的方法

    前言 本文中所有的代码使用 JavaScript 编写,但你也可以用其他兼容 JSR 223 的脚本语言.这些例子可作为脚本文件也可以在交互式 Shell 中一次运行一个语句的方式来运行.在 JavaScript 中访问对象的属性和方法的语法与 Java 语言相同. 本文包含如下几部分: 1.访问 Java 类 为了在 JavaScript 中访问原生类型或者引用 Java 类型,可以调用 Java.type() 函数,该函数根据传入的完整类名返回对应对象的类型.下面代码显示如何获取不同的对象类

  • Java中的接口和抽象类用法实例详解

    本文实例讲述了Java中的接口和抽象类用法.分享给大家供大家参考,具体如下: 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题领域进行分析. 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象. 比如:我们要描述"水果",它就是一个抽象,它有质量.体积等

  • java读取PHP接口数据的实现方法

    和安卓是一个道理,读取json数据 PHP文件: <?php class Test{ //日志路径 const LOG_PATH="E:\phpServer\Apache\logs\\error.log"; //显示的行数 const PAGES=50; public static function main(){ header("content-type:text/html;charset=utf-8"); if(!empty($_GET['action']

  • java 线性表接口的实例详解

    java 线性表接口的实例详解 前言: 线性表是其组成元素间具有线性关系的一种线性结构,对线性表的基本操作主要有插入.删除.查找.替换等,这些操作可以在线性表的任何位置进行.线性表可以采用顺序存储结构和链式存储结构表示. 本接口的类属于dataStructure包的linearList子包.线性表接口LList声明如下,描述线性表的取值.置值.插入.删除等基本操作. package dataStructure.linearList; public interface LList<E> { bo

  • Java Class 解析器实现方法示例

    最近在写一个私人项目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能让我们对Java Class文件的设计与结构能够有一个深入的理解.主体框架与基本功能已经完成,还有一些细节功能日后再增加.实际上JDK已经提供了命令行工具javap来反编译Class文件,但本篇文章将阐明我实现解析器的思路. Class文件 作为类或者接口信息的载体,每个Class文件都完整的定义了一个类.为了使Java程序可以"编写一次,处处运行",Java虚拟机规范对Class文件进行了严

随机推荐