第三章java中抽象类和接口的区别|
来源:网络
编辑:阡殇
时间:2022-06-19
你什么时候用abstract class
,什么时候用interface
”。所以在这篇文章中,我们将讨论这个话题。
在讨论它们之间的差异之前,让我们先来看看它的介绍。
抽象类
Abstract classes是为了捕捉子类的共同特征而创建的。它不能被实例化,它只能被它的子类用作超类。抽象类用于为其子类在层次结构中创建模板。让我们以JDK类为例GenericServlet
public abstract class GenericServlet implements Servlet, ServletConfig,Serializable{
// abstract method
abstract void service(ServletRequest req, ServletResponse res) ;
void init() {
// Its implementation
}
// other method related to Servlet
}
当 HttpServlet 扩展 Generic servlet 时,它提供了 service() 方法的实现
public class HttpServlet extends GenericServlet
{
void service(ServletRequest req, ServletResponse res)
{
// implementation
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
{
// Implementation
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
{
// Implementation
}
// some other methods related to HttpServlet
}
界面:
接口是抽象方法的集合。一个类实现了一个接口,从而继承abstract methods
了接口的。所以它是一种签订合同,你同意如果你实现了这个接口,那么你必须使用它的方法。它只是一个模式,它本身不能做任何事情。 让我们以可外部化接口为例。
public interface Externalizable
extends Serializable
{
void writeExternal(ObjectOutput out)
throws IOException;
void readExternal(ObjectInput in)
throws IOException,
ClassNotFoundException;
}
当你实现这个接口时,你必须实现以上两个方法。
public class Employee implements Externalizable{
int employeeId;
String employeeName;
@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException { employeeId=in.readInt();
employeeName=(String) in.readObject();
} @Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(employeeId);
out.writeObject(employeeName); }
}
抽象类与接口
范围 | 抽象类 | 界面 |
---|---|---|
默认方法实现 | 它可以有默认的方法实现 | 接口是纯抽象的。它根本不能有实现,但在 java 8 中,你可以在接口中有默认方法。 |
执行 | 子类使用extends关键字来扩展抽象类,它们需要提供抽象类中所有声明方法的实现,除非子类也是抽象类 | 子类使用implements关键字来实现接口,并且应该为接口中声明的所有方法提供实现 |
构造函数 | 抽象类可以有构造函数 | 接口不能有构造函数 |
不同于普通的java类 | 抽象类与 java 类几乎相同,只是不能实例化它。 | 接口是完全不同的类型 |
访问修饰符 | 抽象类方法可以有 public、protected、private 和 default 修饰符 | 接口方法默认是公共的。您不能使用任何其他访问修饰符 |
Main() 方法 | 抽象类可以有 main 方法,所以我们可以运行它 | 接口没有 main 方法,所以我们不能运行它。 |
多重继承 | 抽象类可以扩展另一个类,并且可以实现一个或多个接口。 | 接口只能扩展到一个或多个接口 |
速度 | 它比界面更快 | 接口有点慢,因为在类中找到实现的方法需要一些时间 |
添加新方法 | 如果向抽象类添加新方法,则可以提供它的默认实现。所以你不需要改变你当前的代码 | 如果向接口添加新方法,则必须更改实现该接口的类 |
何时使用抽象类和接口
- 如果您有很多方法并且想要其中一些方法的默认实现,那么请使用抽象类
- 如果要实现多重继承,则必须使用接口。由于Java不支持多重继承,因此子类不能扩展多个类,但您可以实现多个接口,因此可以使用接口。
-
如果您的基本合同不断变化,那么您应该使用
abstract class
. 因为如果您的基本合同不断变化并且您仍然使用interface
,那么每次合同更改时,您都必须更改实现该接口的所有类。
java 8中默认和静态方法的介绍
Oracle 试图通过在接口中引入默认方法和静态方法的概念来弥合抽象类和接口之间的鸿沟。所以现在我们可以在接口中提供方法的默认实现,而不会强制类来实现它。我将在下一篇文章中介绍这些主题。
相关文章:
- [其它]第六章JavaFutureTask示例|
- [其它]第六章JavaScheduledThreadPoolExecutor示例|
- [其它]第六章使用Callable和Future的JavaExecutorService示例|
- [其它]第六章JavanewCachedThreadPool示例|
- [其它]第六章JavanewFixedThreadPool示例|
- [其它]第五章在java中使用3个线程打印序列|
- [其它]第五章java中notify和notifyAll的区别|
- [其它]第五章我们可以在java中启动一个线程两次吗|
- [其它]第五章java中的对象级锁定与类级锁定|
- [其它]第五章Java线程连接示例|
相关推荐:
- [其它]第三章java中的抽象类|
- [其它]第四章java中的TreeMap与示例|
- [其它]第四章java中的hashcode()和equals()方法|
- [其它]第六章JavaFutureTask示例|
- [其它]计算机组成原理PDF扫描格式电子版百度云网盘下载
- [其它]程序设计语言概念(第9版)[Robert W. Sebesta]pdf格式电子版百度云网盘下载[53.8M]
- [其它]程序员必读之软件架构[Simon Brown]pdf格式电子版百度云网盘下载[41.6M]
- [其它]程序员的思维修炼 开发认知潜能的九堂课[Andy Hunt]pdf格式电子版百度云网盘下载
- [其它]程序员的职业素养[Robert C. Martin]pdf格式电子版百度云网盘下载[21.6M]
- [其它]程序员教程(第3版)[张淑平]pdf格式电子版百度云网盘下载[136.5M]
栏目分类
最新文章
热门文章
- 计算机组成原理PDF扫描格式电子版百度云网盘下载
- 硅谷之谜[吴军]pdf格式电子版百度云网盘下载[59.5M]
- 自选基金助手,一款Chrome扩展程序
- 七周七语言 理解多种编程范型[Bruce A. Tate]pdf格式电子版百度云网盘下载[9M]
- 系统集成项目管理工程师考试考眼分析与样卷解析(2014版)[软考新大纲研究组]
- 程序员面试金典(第5版)[Gayle Laakmann McDowell]pdf格式电子版百度云网盘下载[81.5M]
- 创业维艰 如何完成比难更难的事[Ben Horowitz]pdf格式电子版百度云网盘下载[65.3
- 程序员的思维修炼 开发认知潜能的九堂课[Andy Hunt]pdf格式电子版百度云网盘下载
- 图灵的秘密 他的生平、思想及论文解读[Charles Petzold]pdf格式电子版百度云网盘下
- OCP OCA认证考试指南全册:Oracle Database 11g(1Z0-051、1Z0-052、1Z0-053)[John Watson]pdf格式