接口和抽象类的区别
面试过程中经常会被问道Java中接口和抽象类有什么区别,下面记了一些代码层面的差异。
-
接口最主要的不同是,接口默认是抽象的,本身不能有任何实现。抽象类可以有为子类提供的默认实例方法。
Note: Java8 开始接口也可有默认实现了
-
接口中的变量默认是final的。抽象类可以包含非final的变量。
-
接口的成员默认是public的。抽象类可以有任意类型的成员,private,protected都可以。
-
实现接口需要用implements关键字。继承抽象类用extends关键字。
-
接口继承一个或者多个接口,但是不能继承或实现任意抽象抑或者实体类。抽象类可以继承另外一个Java类同时还可以实现多个Java接口。这一有些关于为什么java类不支持多继承
-
一个Java类可以实现多个接口,但是只能继承一个抽象类。
-
接口是完全抽象的,不能够实例化。抽象类也是不能被实例化的,但是如果其中有main()方法时,还是可以调用。
-
和抽象类相比,接口定义的引用在具体执行时由于需要做额外的间接寻址工作因此会慢些。(执行时需要通过搜索具体类的实现方法)
Recent post
Spark 应用的常见性能考虑
Hadoop MapReduce中的负载均衡问题二 详细分析及现有方案 Analyzing Load Balancing on Hadoop
Hadoop MapReduce中的负载均衡问题 Load Balancing on Hadoop MapReduce
Java(JVM)内存类型详解 Java(JVM) Memory Types
Java为何不支持多继承 Why Multiple Inheritance is Not Supported in Java
接口和抽象类的区别
深入理解重载和重写及与之相关的多态性 Overloading and overriding
Java垃圾回收机制四 Monitoring and Analyzing Java Garbage Collection
Java垃圾回收机制三 Types of Java Garbage Collectors
Java垃圾回收机制一 简介--Java Garbage Collection Introduction
Java垃圾回收机制二 工作原理--How Java Garbage Collection Works?