java接口学习_Java学习--接口

1.接口:

1.1定义:

是多个类共同的公共行为规范,这些行为是与外部交流的通道,这就意味着接口里通常是定义一组公用方法。是一种引用数据类型,使用interface声明接口。

1.2语法:

public interface 接口名称{

}

1.3优点:

让软件的各个模块之间面向接口耦合,且相互之间的依赖性不高,能够达到相互利用的同时又不会相互牵扯,即其定义了一组规范,只需其他模块符合这个规范即可使用,并不会关心这个模块符合规范的过程,也不关心从何而来,达到高聚合,低耦合的效果。可以为系统提供良好的扩展性即可维护性。

1.4接口的特性:

1.4.1接口中可以声明属性,且其属性会被默认为静态常量(Static final),无论编译者是否主动声明,JVM都将会将其定义成静态常量,供给大家使用,不过,一般来讲,我们不会在接口中声明属性。

实例:

public interface MyInterface {

public static final String version = "1.0";

public int count = 10; // 默认是static final类型}

1.4.2接口中可以声明方法,且一定是抽象方法,不可声明实例方法,即没有方法体,因为接口的特殊作用即是让实现类一定要去实现接口中的抽象方法,这个方法即为接口规定的规范。

实例:

public interface MyInterface {

public abstract void showInfo();

void showInfo3();

// 推荐写法public void showInfo2();

}

1.4.3在接口中无法构造方法,因为不能利用接口去创建对象,而构造方法的目的正是创建对象。

实例:

1.4.4接口具有多继承的能力,即一个借口可以继承两个及以上的接口来扩展其规范性,一旦有实现类接口到该接口类,则需全部实现该接口类的继承接口类中的(包含本接口类)所有抽象方法。

public interface CInterface extends AInterface, BInterface {

}

1.4.5一个类亦可接口多个接口类,也必须全部实现所有接口类的抽象方法。

实例:

public class ImplClassA implements AInterface,BInterface{

@Override

public void showInfoA() {

System.out.println("实现接口中的showInfoA");

}

@Override

public void showInfoB() {

System.out.println("实现接口中的showInfoB");

}

}

2.接口的其他定义

2.1接口可表示一种能力,在接口的声明过程中,将会创建出许多抽象方法,我们可以将这些方法看做是能力,其对能力做出了一定的规范,并让实现类来帮助其实现,从而使得实现类的能力得到拓展及升级。

2.2接口亦可完成多态

实例:

package cn.sxt.interface4;

public class Test01 {

public static void main(String[] args) {

// 同一引用类型USBInterface usbInterface = null;

// 实例不同usbInterface = new USBFan();

// 对同一方法的执行结果不同usbInterface.connect();

usbInterface = new USBMouse();

usbInterface.connect();

usbInterface = new USBDisk();

usbInterface.connect();

}

}

这里利用接口类型呢去引用实现类来完成多态

接口实现多态: 接口类型 引用 实现类对象

值得注意的是,这里的在引用实现类的方法后,实现的正是实现类实现的方法,不同的实现类有不同的方法,因此实现多态。

3.接口和抽象类

在学习的过程中,其实不难发现,接口与抽象类具有一定的相似程度,他们都具有以下相同点:

1.接口和抽象类都不能被实例化,他们都位于继承树的顶端(即金字塔的顶端),用于被实现类去实现和继承。

2.接口和抽象类都可以包含抽象方法,且实现类都必须继承这些抽象方法并实现他们。

虽说在浅显层面上看不出两者的区别,但在实际应用中,两者的差异性及灵活性都有很大的不同。

可以这么简单地理解,接口可以方便模块与模块之间的链接,抽象类可以方便于同一个内部。

具体可做一下分析:

接口是一种规范,作为系统与外界交互的一个窗口,接口规定了实现者应该事先哪些方法,却不会理会你如何实现,只需符合接口规定的“标准”即可,且这个接口的耦合性很低,所以并不会经常性更改接口,及程序员完成接口代码后无需再次更改添加即可实现外部链接。

而抽象类不同,抽象类作为众多子类的共同父类,其体现的是一种模板,且可含实现方法,然后通过子类去完善,从而达到目的,所以其主要作用是完善内部的整体方法,而不是对外对接,一旦要与外界对接,则需繁琐地添加属性或方法。

4.面向接口编程

同面向对象一样,面向接口的编程即一切皆接口。

而面向接口编程能够极好地降低程序各模块间的耦合性,从而提高系统的可扩展性和可维护性。

实例:

package cn.sxt.interface06;

public class Writer {

// 预留墨盒接口private InkBoxInterface inkBoxInterface;

// 预留纸张接口private PaperInterface paperInterface;

public InkBoxInterface getInkBoxInterface() {

return inkBoxInterface;

}

public void setInkBoxInterface(InkBoxInterface inkBoxInterface) {

this.inkBoxInterface = inkBoxInterface;

}

public PaperInterface getPaperInterface() {

return paperInterface;

}

public void setPaperInterface(PaperInterface paperInterface) {

this.paperInterface = paperInterface;

}

public Writer(InkBoxInterface inkBoxInterface, PaperInterface paperInterface) {

super();

this.inkBoxInterface = inkBoxInterface;

this.paperInterface = paperInterface;

}

public Writer() {

super();

}

public void print(String content) {

System.out.println("打印机正在使用"+

this.inkBoxInterface.getColor()+

"颜色打印"+this.paperInterface.getSize()

+"打印"+content);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值