Java 接口 简要说明举例

Java 接口

Java 接口(重要)

基本定义:

如果一个类中只有抽象方法和全局常量所组成;在这类情况下不会将其定义为抽象类,而只会将其定义为“接口”;严格来讲:接口就属于一个特殊的类,而且这个类里面只有抽象方法和全局常量(无构造方法)

接口定义需要使用interface 关键字。

由于接口里面存在有抽象方法,所以接口不可进行对象实例化(new)

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

2、 接口的子类(不是抽象类),必须要覆写接口中的全部抽象方法

3、 接口的对象可以利用子类对象的向上转型进行实例化操作

实际上 A和B接口没有直接联系,但是两个接口拥有同一个子类X;因为最终实例化的是X子类,而子类属于B类的对象,所以以上的Demo代码是可行的。

对于子类而言除了接口之外,还可能会继承抽象类,所以说一个子类又要继承抽象类又要实现接口的化;先使用extends实现继承,再使用implements实现接口

对接口而言组成的内容就是抽象方法和全局常量,所以很多的时候也有一些人为了省略,可以不用写上 abstract 或 public static final 声明;并且再方法上是否写public结果都是一样的,因为再接口中只能够使用唯一的public访问权限。

接口定义的不同

完整

interface A { public static final String MSG = "Hello" ; public abstract void fun () ; }

简短

interface A { String MSG = "Hello" ; public void fun () ; }

**在接口定义抽象方法时可省去public但为了防止访问权限的报错和混淆,不建议省去**

一个抽象类只可以继承一个抽象类,但是反之:一个接口却可以使用extends关键字同时继承多个接口(接口不可以继承抽象类)

从继承关系角度:抽象类的限制比接口多;

一个抽象类只能够继承也给抽象的父类,而接口没有这个限制

一个子类只能够继承一个抽象类,却可以实现继承多个接口

【Java接口主要功能就是解决了继承的单继承局限问题】

虽然接口的定义是只包含定义抽象方法和全局常量,但是所有的限制是不受内部的影响;所以再接口中也可以定义普通内部类、抽象内部类、内部接口

**在一个接口的内部如果使用了static定义内部接口,等同一个外部接口

1)接口再实际开发中三大核心作用:

定义不同层之间的操作标准

表示一种操作的能力

表示将服务端的远程方法视图暴露给客户端

标准定义:(定义不同层之间的操作标准)

在Java中,也存在程序标准,而标准就是由接口定义的;通俗的理解为:接口类即是一个标准,子类则依靠接口类而产出的依赖(接口)

工厂设计模式:Factory

interface Fruit { public void eat() ; } class Apple implements Fruit { public void eat() { System.out.println("eat...") ; } } public class Demo { public static void main(String [] args) { Fruit f = new Apple() ; f.eat() ; } }

interface Fruit { public void eat() ; } class Apple implements Fruit { public void eat() { System.out.println("Apple...") ; } } class Orange implements Fruit { public void eat() { System.out.println("Orange...") } } public class Demo { public static void main(String [] args) { Fruit f = new Orange() ; f.eat() ; } }

在Java过程中,最需要关心的就是如何取得一个Fruit接口对象,而不是关心对象是被谁实例化的。

一旦子类进行扩充,main的操作和实例化+调用则会发生变化。

子类对于mian完全透明,所有接口对象都是通过Factory类(工厂类)取得的,如果日后要扩展新的子类对象,则只需要修改工厂类即可,但是客户端调用则不会发生变化。

Fruit f = Factory.getInstance(****) ;中只需要给工厂类传递调用子类名即在工厂类通过if判断调用的子类名进行对子类进行调用操作。

main可以看见接口类和工厂类,接口类可以看见子类和子类方法,工厂类可以调用子类和子类方法;main通过调用工厂类而使用接口子类。

总结:即是通过工厂类实现对接口子类的操作,在子类发生变化时只需要改变工厂类代码即可,不需要对main客户端进行过多承重的代码设计(不需要再一一对接口子类声明实例化)

代理设计模式:

代理设计模式的核心在于有一个主题操作接口(可能有多种方法);核心业务主题只完成核心功能;而代理主题负责完成与核心业务有关的操作。

抽象类与接口的区别:

区别

抽象类

接口

关键字

abstract class

interface class

组成

构造方法、普通方法、抽象方法、static方法、常量、变量

抽象方法、全局常量

子类使用

class 子类 extends 抽象类

class 子类implements 接口

子类关系

抽象类可以实现多个接口

接口不可以继承抽象类 但可以继承多个父类接口

权限

可以使用三类权限

仅可以使用public权限

限制

只能继承一个抽象类(单继承)

可以实现多个接口

子类

抽象类和接口都必须有子类,子类必须要覆写全部的抽象方法

实例化对象

依靠子类对象的向上转型进行对象的实例化

经过比较发现:抽象类中支持的种类绝对要高过接口支持的种类;但是抽象类的单继承局限,导致抽象类的缺点大于优点以及接口的引用高于抽象类。

n 在进行公共操作的时候,一定要定义出接口

n 有了接口就需要利用子类完善方法

n 自己写的接口,不要关键字new直接实例化接口子类(用工厂类完成)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值