本文旨在讨论什么时候使用抽象类,什么时候使用接口。
抽象类(Abstract):
我们知道Java面向对象编程中有继承的概念,当有的父类我们不希望可以创建其实例的时候就要用到抽象类。比如三角形、圆形、正方形的的父类都为“形状”,我们可以创建三角形、圆形和正方形的实例,但是不希望创建“形状”的实例,因为形状是不存在的,这个时候就要用到抽象的方法定义“形状”。
abstract class Shape{
abstract void draw();
abstract void erase();
}
值得注意的是:如果一个类有了一个抽象的方法,这个类就必须声明为抽象类。如果父类是抽象类,那么子类就必须覆盖所有在父类中的抽象方法,否则子类也将成为一个抽象类。
抽象类就是为了避免制造出这个类的对象而设计的。
接口(Interface):
Java把抽象的概念又更推进了一步,这就是接口,接口其实就是完全抽象的类。我们知道接口与抽象类的区别就是接口中所有的方法都是没有方法体的,而且都是public abstract类型的,接口中所有的成员变量都是public static final 的变量,并且必须经过定义初始化。
interface Shape{
void draw();
void erase();
}
OK,抽象类与接口已经简单的介绍完了,我想大部分人肯定跟我一样还是没有明白这两个到底有什么使用上的区别!
下面我来总结一下:
1.抽象类和接口在某种程度上的确可以相互替换,比如上面这个例子。
2.抽象类只能被继承,且子类只能继承一个,而接口可以实现很多个。
3.如何选择使用抽象类还是接口取决于程序的设计,下面举个实例:
我们要实现一个“门”,其子类有木门,铁门,玻璃门:
我们用抽象类实现:
abstract class Door{
abstract void open();
abstract void close();
}
也可以用接口实现:
interface Door{
void open();
void close();
}
现在老板提出我们应该生产防盗门,并且安装在铁门和玻璃门上。
这个时候就会有个alarm()方法,但是显然alarm方法实现在Door抽象类中是不合理的,因为不是所有的门都有该方法。
在每个子类中添加alarm()方法也不合适,所以这个时候就应该使用接口,我们把程序重新设计一下:
abstract class Door{
abstract void open();
abstract void close();
}
interface Alarm {
void alarm();
}
class AlarmDoor extends Door implements Alarm {
void open() { … }
void close() { … }
void alarm() { … }
}
这样就完美了,如果老板现在让我们给木门和铁门加装猫眼的功能,只需要设计一个猫眼的接口就行了。
现在知道什么时候用抽象类什么时候用接口了吗?
分享到:
相关推荐
java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...
在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...
抽象类和接口的区别 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持...
结论:abstract class和Interface是JAVA语言中的两种定义抽象类的方式。Interface将abstract的概念作了更进一步的发挥。你可以想像Interface是“纯粹”的 abstract class,只可以包含抽象方法,也包括一些常量的定义...
1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结
Java源代码:抽象类和接口 Java源代码:抽象类和接口
Java抽象类与接口实验报告
java 抽象类与接口的练习,包括代码及注释,个人笔记
深入浅出的说明java抽象类与接口区别,让初学者更好的理解java抽象类与接口的概念
学生通过对该项目整体框架的搭建和对动物城信息管理等模块的设计与功能实现,训练了学生对项目框架的搭建、类的封装、抽象类定义与继承、接口的定义与接口的实现等Java OOP面向对象知识点的掌握。 本项目主要包括...
Java中的类、抽象类和接口的区别和联系
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性...
在Java语言中,abstract class 和interface 是支持抽象类定义的两种机制区别
此书对于你学习Java抽象类和接口有非常大的帮助
该资源对接口与抽象类作了详细分析与比较,相信你看了之后,会彻底的明白了,java学习更上一层楼
Abstractclass和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力
java利用接口和抽象类改写求圆的面积和梯形的面积.docx