一、介绍。
接口和内部类为我们提供了一种讲接口与实现分离的更加结构化的方法。
没有足够信息描述的类我们可以称它为抽象类。
二、问题引入。
我们都知道门具有打开与关闭的功能,还有上锁等功能。门怎么打开与关闭是由设计师来决定的。这时我们可以设定一个抽象类。
1 abstract class door{ 2 abstract void open(); 3 abstract void close(); 4 }
假如此时我们给门加入报警的功能怎么办呢。当然我们不能在原有的door类中直接加入alarm的功能,因为并不是所有的门都具有报警这一项功能,所以我们不能这样建立一个抽象类。目前我们由两种解决方案。
第一种:
1 abstract class door{ 2 abstract void open(); 3 abstract void close(); 4 } 5 abstract class Alarm extends door{ 6 abstract void alarm(); 7 }
通过定义一个抽象类来继承原有功能并且添加自己独特的功能。这种方法虽然也可以实现门的着三种功能,但是却增加了代码的复杂性,也不易于阅读,更不符合程序设计与面向对象的合理要求。
第二种:
1 abstract class door{ 2 abstract void open(); 3 abstract void close(); 4 } 5 interface Alarm { 6 void alarm(); 7 }
通过定义一个接口来描述报警这一功能,我们可以通过一个类来继承door这个功能,还能通过接口来实现报警这一个功能。正好符合程序设计的理念。
三、抽象类与接口的区别。
学过java的基础都知道抽象类和接口都必须通过其他不包含抽象方法的类来实现其中的功能。那么它们有什么区别呢。
抽象类的特点:
1.抽象类不能实例化。可以通过继承的子类来实现实例化。
2.只要包含一个抽象方法的类就必须定义为抽象类。
3.抽象类可以包含具体的方法,当然也可以不包含任何的抽象方法。
4.如果从一个抽象类继承,并且想创建该新类的对象,那么就必须为基类中的所有抽象方法提供方法定义。
接口的特点:
1.Interface的方所有法访问权限自动被声明为public。
2.接口中不存在实现的方法。
3.实现接口的非抽象类必须要实现该接口的所有方法。
《Thanking in java》--interface这个关键字产生的是一个完全抽象的类,它根本就没有提供任何具体实现。它允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体。接口只提供了形式,而未提供任何具体的实现。一个接口表示:“所有实现了该特定接口的类看起来都像这样。interface只是它的外貌,但是现在我要声明它是如何工作的。”接口被用来建立类与类之间的协议。interface是一个极度抽象的类。想要创建一个接口,需要用interface关键字来替代class关键字。
区别:
1.抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
2.接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法。
3.一个类只能继承一个抽象类,而一个类却可以实现多个接口。
4.抽象类是对类的抽象(对事物进行抽象),接口是对行为的抽象(对方法进行抽象)。
四、总结
1.一个类只能存在一个父类但是可以存在多个接口。
2.在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的成员数据,而且它的所有方法都是抽象的。
3.抽象类和接口所反映的设计理念是不同的,抽象类所代表的是“is-a”的关系,而接口所代表的是“like-a”的关系。