java之接口精选

Posted 磊哥的Java历险记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之接口精选相关的知识,希望对你有一定的参考价值。

前言:

我们上一篇聊完了抽象类,接着我们聊一下接口,接口的感觉很奇妙,后面的实战开发会反复聊到和用到,初学的兄弟们一定要多注意!可以动手跟着下面的演示代码,敲一下! 

java之接口精选_代码

一.概念和介绍

    Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

两种含义:

一:Java接口,Java语言中存在的结构,有特定的语法和结构;

二:一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。

接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。

Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。但是接口不是类,不能使用new 运算符实例化一个接口。如 x=new comparable(......);//这个是错误来的。但是可以声明接口变量Comparable x; //这是允许的。

Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public、static和final属性。即接口中的属性可以定义为 public static final int value=5;

接口把方法的特征和方法的实现分割开来。这种分割体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。一个角色由不同的演员来演,而不同的演员之间除了扮演一个共同的角色之外,并不要求其它的共同之处。

二.知识点介绍

1、基本概念

2、接口使用

3、接口的实际应用

三.知识点详解

1、基本概念

    接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

    如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有。

代码演示:定义一个接口

interface A//定义一个接口

//全局常量
public static final String MSG = "磊哥的java历险记-@51博客";
//抽象方法
public abstract void print();

java之接口精选_接口_02

2、接口使用

      由于接口里面存在抽象方法,所以接口对象不能直接使用关键字new进行实例化。

接口的使用原则如下:

    (1)接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口;

    (2)接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法;

    (3)接口的对象可以利用子类对象的向上转型进行实例化。

代码演示1:

package com.Test;

public class Main

interface A//定义一个接口A
public static final String MSG = "磊哥的java历险记-@51博客";//全局常量
public abstract void print();//抽象方法

interface B//定义一个接口B
public abstract void get();


static class X implements A,B//X类实现了A和B两个接口

@Override
public void print()
System.out.println("接口A的抽象方法print()");

@Override
public void get()
System.out.println("接口B的抽象方法get()");
//输出全局变量
System.out.println(MSG);




//主方法调用执行
static class Test
public static void main(String[] args)
X x = new X();//实例化子类对象
A a = x;//向上转型
B b = x;//向上转型
a.print();
b.get();





java之接口精选_概念_03

    对于子类而言,除了实现接口外,还可以继承抽象类。若既要继承抽象类,同时还要实现接口的话,使用以下语法格式:

    class 子类 [extends 父类] [implemetns 接口1,接口2,...]

代码演示2:

package com.Test;

public class Main

//定义一个接口A
interface A
public static final String MSG = "磊哥的java历险记-@51博客";//全局常量
public abstract void print();//抽象方法

//定义一个接口B
interface B
public abstract void get();

//定义一个抽象类C
abstract class C
public abstract void change();

//X类继承C类,并实现了A和B两个接口
class X extends C implements A,B

@Override
public void print()
System.out.println("接口A的抽象方法print()");

@Override
public void get()
System.out.println("接口B的抽象方法get()");

@Override
public void change()
System.out.println("抽象类C的抽象方法change()");


java之接口精选_代码_04

在Java中,一个抽象类只能继承一个抽象类,但一个接口却可以使用extends关键字同时继承多个接口(但接口不能继承抽象类)。

package com.Test;

public class Main
//定义接口A
interface A
public void funA();

//定义接口B
interface B
public void funB();

//C接口同时继承了A和B两个接口
interface C extends A,B//使用的是extends
public void funC();

//X类实现 C,但是C继承了A和B,所以C实现了A B C三个接口
static class X implements C
@Override
public void funA()
System.out.println("磊哥");

@Override
public void funB()
System.out.println("java历险记");

@Override
public void funC()
System.out.println("@51OTC博客");


//主方法调用
static class Test
public static void main(String[] args)
//创建X对象
X x = new X();
//向上转型
A a =x;
B b =x;
C c = x;
//方法调用
a.funA();
b.funB();
c.funC();



java之接口精选_接口_05

java之接口精选_java_06

抽象内部类:

由此可见,从继承关系来说接口的限制比抽象类少:

    (1)一个抽象类只能继承一个抽象父类,而接口可以继承多个接口;

    (2)一个子类只能继承一个抽象类,却可以实现多个接口(在Java中,接口的主要功能是解决单继承局限问题

    (3)从接口的概念上来讲,接口只能由抽象方法和全局常量组成,但是内部结构是不受概念限制的,正如抽象类中可以定义抽象内部类一样,在接口中也可以定义普通内部类、抽象内部类和内部接口(但从实际的开发来讲,用户自己去定义内部抽象类或内部接口的时候是比较少见的),范例如下,在接口中定义一个抽象内部类:

代码演示:

package com.Test;

public class Main
//定义A接口
interface A
public void funA();
abstract class B//定义一个抽象内部类
public abstract void funB();


//在接口中如果使用了static去定义一个内接口,它表示一个外部接口:
interface C
public void funA();
static interface B//使用了static,是一个外部接口
public void funB();


//X继承A的抽象类
static class X extends A.B
@Override
public void funB()
System.out.println("磊哥的java历险记");


//D实现C的外部接口
static class D implements C.B
@Override
public void funB()
System.out.println("-@51博客");



//主方法调用
static class Test
public static void main(String[] args)
//创建X对象
D d = new D();
X x = new X();
x.funB();
d.funB();





java之接口精选_概念_07

java之接口精选_概念_08

3、接口的实际应用(标准定义)

    在日常的生活之中,接口这一名词经常听到的,例如:USB接口、打印接口、充电接口等等。

java之接口精选_接口_09

    如果要进行开发,要先开发出USB接口标准,然后设备厂商才可以设计出USB设备。

    现在假设每一个USB设备只有两个功能:安装驱动程序、工作。

定义一个USB的标准:

代码演示: 

package com.Test;

// 定义操作标准
interface USB
//安装
public void install() ;
//工作
public void work() ;

//在电脑上应用此接口:
class Computer
public void plugin(USB usb)
usb.install() ;
usb.work() ;


//定义USB设备—手机:
class Phone implements USB
public void install()
System.out.println("安装手机驱动程序。") ;

public void work()
System.out.println("手机投屏电脑,开始直播。") ;


//定义USB设备—打印机:
class Print implements USB
public void install()
System.out.println("安装摄像头驱动文件") ;

public void work()
System.out.println("使用外部摄像头,开始录制") ;


//定义USB设备—MP3:
class MP3 implements USB
public void install()
System.out.println("安装耳机耳麦驱动文件") ;

public void work()
System.out.println("直播时耳机耳麦负责收声和播放") ;


//测试主类:
class TestDemo
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String args[])
Computer c = new Computer() ;
//传递具体的USB设备进接口
c.plugin(new Phone()) ;
c.plugin(new Print()) ;
c.plugin(new MP3());
System.out.println("============="+name+"=============");

java之接口精选_代码_10

java之接口精选_概念_11

结语:

 每一篇文章都是有演示代码和代码截图的,每一行代码都是我动手敲出来的,目的就是想告诉初学者的兄弟们,可以放手大胆的跟着敲一敲代码!

java之接口精选_接口_12


以上是关于java之接口精选的主要内容,如果未能解决你的问题,请参考以下文章

java之递归算法精选

java之Math类精选

java之StringBuilder和stringbuffer精选

java之构造方法精选

java之Calender类精选

java之基本类型包装类精选