上节我们学习了抽象类,了解他作为类模板的优势。这节我们继续学习抽象的另一种体现:接口。
这节课的内容是:
1、接口的概念
2、接口语法
3、接口的使用
第一部分:接口的概念
定义:
接口是对象行为的抽象,不属于类。
这句话怎么理解呢?我们拿个例子来说。
之前我们学习对象的时候,说的是类代表一组对象。比如人这个类可以代表所有人。
当需要得到某一个人张三的时候,只需要实例化人这个类,赋给张三的属性就可以了。
Person zhangsan = new Person(); zhangsan.setName("张三");
但是,接口呢,只关注对象的行为,不关心是不是同一组对象。例如,人有吃的行为,动物也有。
那么,接口就可以定义这个吃的行为,当你需要关注这个行为的时候,不用关心具体的对象是谁,
直接使用接口操作这个行为就行了。
我们再举个例子加深理解。
你女朋友(假设你有)要求情人节送花,那么,作为程序猿的你去网上仔细研究了附近的花店,最后选中一家花店,
定了99朵玫瑰,然后要求他们在情人节当天送到你家楼下。那么,就这件事来说,存在着接口的思想。我们来分析下。
1、首先,你女朋友需要你送花,但是她并不关心花从哪里来,花贵不贵。这个时候她的需求只是送花这个行为。
我们首先从女朋友的角色来看,第一次,假设男朋友存在价值。那么,类为
class GirlFriendNormal{
private BoyFriend bf;
void needFlowers(){
bf.offerFlowers();
}
}
class BoyFriend{
void offerFlowers(){
};
}
但是,其实她只是想要花,如果你不送,男朋友也可以被送花这个行为所代替(别人也可以送,让你绿油油)。。。如下
class GirlFriendNeedFlowers{
OfferFlowers offer;
void needFlowers(){
offer.offerFlowers();
}
}
interface OfferFlowers{
void offerFlowers();
}
嘿嘿,是不是有种女朋友视角~~。。花店给你指派不同帅哥送过去,你关心的是花能不能送达,并不是送花的人。是不是。
这个时候花店也可以被抽象为一种行为--送花。
class You{
OfferFlowers offer;
void needFlowers(){
offer.offerFlowers();
}
}
第二部分:语法
了解了接口的目的和基本内容后,我们给接口做语法的总结。
接口是和类同一级别的,但不是类,它只关注行为本身,而并不关心是那个对象的这种行为。
接口的定义:
interface interfaceName{}
使用interface关键字定义接口。
定义完接口后,接口当中的变量和方法都有哪些规则呢?
接口中只能定义静态常量,抽象方法。(jdk1.8之前)
接口中的属性的默认是public static final 、方法是public abstract。
interface TestInterface{
public static final int i = 0;
public abstract void test();
}
interface TestInterface{
int i = 0;
void test();
}
静态方法不用多说,默认方法的定义格式为:
interface defaultInterface
{
Integer getId();
default String getName()
{
return "默认方法里面的输出。。。";
}
}
其实之前学完类的属性和抽象类的抽象方法,现在就非常容易理解了。
第三部分:使用
在讲述使用之前,我们先来总结下接口的特点:
1、一个类是可以实现多个接口的
2、接口只有抽象方法,但不使用abstract修饰
3、接口可以继承接口,但只能继承一个接口。不能继承类。
4、接口的成员变量是static final的
5、接口方法在jdk1.6之后默认为public,不需要手动添加。
6、接口在jdk1.8之后增加了默认方法和静态方法
7、接口不能实例化,必须通过类实现它
使用
其实接口的使用之前已经讲述过了。就是编程时我只需要一个方法,为我提供数据。
也就是我需要一个行为,让别的对象执行这个行为。但是呢,我不关心是那个对象执行的。
具体的对象是根据参数或运行时动态决定的。
例如我们做交易系统,我们下单系统并不关心那个用户下单,只是关注用户下单 的动作。根据下单行为动态的判断当时的用户和商家就可以了。
总之,记住一句话,我只需要一个行为,不关系对象的时候,就是使用接口的时候。
大家慢慢练习,慢慢体会。
接口的部分就到这了。
何时需要定义接口?
如何定义一个接口?
接口当中都有哪些规约?
你学会了么?