开发者社区> 技术小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

学习Java基础知识,打通面试关~十二接口与抽象类

简介: 在我们Java开发的过程中,接口使我们经常使用到。但是我们也会用到抽象类。那么我们在开发的时,具体应该怎么选择呢?这两者有什么区别?我们今天就来学习下。
+关注继续查看

在我们Java开发的过程中,接口使我们经常使用到。但是我们也会用到抽象类。那么我们在开发的时,具体应该怎么选择呢?这两者有什么区别?我们今天就来学习下。

抽象类

抽象类顾名思义就是不能实例化的类,我们在创建的时候会使用abstract 来创建。在抽象类中含有无具体实现的方法,所以我们在使用的时候不能使用该类来创建对象。

抽象类在表面上普通的类没有区别,可以有多个抽象方法,当然也可以没有抽象方法。

抽象类的实现主要是为了提供代码复用的目的。

抽象类前面的修饰除了abstract ,还有有public,protected,缺省情况下是public。不能是private.不然子类不能继承父类。

我们子类在继承抽象类时,子类必须实现父类的抽象方法,否则 ,子类也必须定义为抽象类。

public abstract class Abstorct {
 //方法声明为抽象的。
 public abstract  void  add();

}

public class AbstorctImpl  extends Abstorct {


   @Override
   public void add() {

   }
}

接口

编程中,接口我们经常使用,利用它达到API定义与实现分离的目的。

在Java中,是没有多继承这一实现的,但是我们可以使用接口来达到这个目的。方便我们去实现我们想要的目的。

接口中的变量总是被隐式指定为public static final 变量。 并且方法也是被隐式的定义为public abstract。接口中的方法必须都是抽象方法。

在java8以后,接口中也有了默认的实现方法。

//java集合中一个默认实现的方法。
public interface Collection<E> extends Iterable<E> {
default boolean removeIf(Predicate<? super E> filter) {
       Objects.requireNonNull(filter);
       boolean removed = false;
       final Iterator<E> each = iterator();
       while (each.hasNext()) {
           if (filter.test(each.next())) {
               each.remove();
               removed = true;
           }
       }
       return removed;
   }
}

两者不同点

两者一个是类一个是接口,从子类来实现或者继承时,实现就不同,继承类java中只能单继承。

抽象类是事务的抽象,比如我们对于一个动物的描述,人和猴都有相似的东西,可以抽象出来共同的特征。 抽象类 是一个 has-a的关系。接口是is-a的关系。比如猴是否能跳,能跳跃,那么就能实现该接口,不能实现则不能实现。

接口中不能含有静态代码块和静态方法,但是抽象类是可以存在静态代码块和静态方法的。

接口中的成员变量默认是public static final 类型的。抽象函数中的成员可以是各个类型的。

我们在程序中如果对接口进行增加方法,那么子类实现也得增加其实现方法 不可取,但是java8以后增加了默认方法的实现。而抽象类中添加了非抽象方法,子类只会享受其能力的扩展,不用担心编译出现问题。

简单了解下抽象方法和接口,让我们在编程的时候更加享受其特性带来的方便。在选择上可以有更多的选择。

原文发布时间为:2018-07-01
本文作者:mengrui
本文来自云栖社区合作伙伴“LuckQI”,了解相关信息可以关注“LuckQI”。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java面试|Java基础知识总结一
Java面试|Java基础知识总结一 什么是Java? Java 是 Sun Microsystems 于1995 年首次发布的一种 编程语言 和计算平台。编程语言还比较好理解,那么什么是 计算平台 呢? Java 是快速,安全和可靠的。 从笔记本电脑到数据中心,从游戏机到科学超级计算机,从手机到互联网,Java 无处不在! Java 主要分为三个版本 JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版 JavaME(J
0 0
【前端面试】基础知识总结
【前端面试】基础知识总结
0 0
这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可)
本文主要讲解了几个Java方面的知识,也是面试中经常问到的部分,非常适合刚入坑Java的小伙伴儿们学习以及准备面试的大佬巩固。如果对这方面感兴趣,那就快来看看吧
0 0
跳槽涨薪后一个月考核转正——C# 面试考核基础知识
以上文章讲述的是【SQL调优与设计规范】接下来我总结一下【C# 面试考核基础知识】。
0 0
C++基础知识第三天(面试必备)
  1.struct 的区别(C 和 C++):   C语言中只能定义变量。   C++语言中可以定义变量和函数。同时C++语言中,struct 中所有变量和函数都是 "public" 权限   2.类的封装:   3.类内部的三种权限   public:共有属性(修饰的成员变量和方法; 可以在类的内部和外部使用。)   private:私有属性(修饰的成员变量和方法,只能在类的内部使用,不能在类的外部使用)   protected:主要用于继承,保护属性(修饰的成员变量和方法; 可以在类的内部和继承的子类使用,不能在类的外部使用)   4.struct 和 class 的区别
0 0
Java工程师面试必问的基础知识整理(超详细)
最近又重新复习了一遍java基础知识,做了一下整理。这些知识点大部分为面试必问,建议收藏。 在理解的基础上进行记忆会更深刻,推荐用自己语言组织归纳,这样面试官认为你至少还是知道这个知识点的。 直接上干货!
0 0
学习Java基础知识,打通面试关~十三锁机制
做java中经常问道的一个问题就是线程池用过吗?通用的有哪些?如果不用通用的我们应该怎么创建线程池?这些问题。今天自己也做下总结。虽然原先也写过。现在再总结下,让自己能弄明白。
1893 0
[C++ 面试基础知识总结] 关联容器
[C++ 面试基础知识总结] 关联容器 参考书籍:《C++ Primer》 目录 C 面试基础知识总结 关联容器 目录 关联容器类型 关联容器概述 定义关联容器 关键字类型的要求 pair 关联容器操作 关联容器迭代器 添加元素 删除元素 访问元素 无序容器 关联容器类型 标准库共提供了8个关联容器 map 关联数组:保
1260 0
《Java开发者面试百宝书》电子版地址
敲黑板!Java求职者看过来!保姆级面试干货你要不要!《Java开发者面试百宝书》集结阿里Java大神一手面试经验诚意出品,精选了阿里官方出品的面试干货和面试建议,包括Java面试常见问题标准答案以及阿里技术大神为你总结的面试要点。
0 0
+关注
技术小能手
云栖运营小编~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Java开发者面试百宝书
立即下载
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧
立即下载
面试常考算法
立即下载