抽象类

用途

借助抽象类可以实现代码的重用。

特点

  • 抽象类无法实例化。但抽象类有构造方法,在子类创建对象时用。
  • 抽象类中可以定义抽象方法,不能有函数体。也只有抽象类中可以定义抽象方法。

为什么抽象类不能实例化却可以有构造方法

  • super用法

      super是指向父类的引用,如果构造方法没有显示地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用。如果父类由没有默认的无参构造方法,编译器就会报错,super()语句必须是构造方法的第一个子句。

      定义子类的一个对象时,会先调用子类的构造函数,然后在调用父类的构造函数,如果父类函数足够多的话,会一直调用到最终的父类构造函数,函数调用时会使用栈空间,所以按照入栈的顺序,最先进入的是子类的构造函数,然后才是邻近的父类构造函数,最后再栈顶的是最终的父类构造函数,构造函数执行是则按照从栈顶到栈底的顺序依次执行.

    所以父类构造方法可以写一些所有子类共有的方法,使得在子类初始化时不用每个都写同样的方法

接口

用途

  • 接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。
  • 使项目分层,所有层都面向接口开发。(类实现接口、类调用接口)
  • 使代码间的耦合度降低。

特点

接口也是一种引用类型,可以等同看作类。

不同的,

  • 接口没有构造方法。
  • 接口中只能出现常量和抽象方法。接口中常量的public static final 可省略 ,抽象方法的public abstract 可省略。
  • 接口和接口之间可以多继承(extends)。一个类可以实现(implements)多个接口。
  • 一个非抽象的类实现接口,必须将接口中的所有方法实现(即覆盖)。

为什么接口中方法和常量默认是public的,为什么接口中没有变量只有常量

  1. 接口是一种约束和规范,是一种更加更高级的抽象类,抽象类的方法必须是公开的,因为要给别的类去实现。此外由于子类的访问级别不能低于父类,所以子类在实现接口重写方法时的修饰符必须是public。
  2. 接口中没有变量的原因;既然是约束和规范,怎么能够定义一个大家都可以改的东呢。

接口与抽象类对比

  • 语法的区别:

    • 关于一些有的没的

      1. 抽象类可以有构造方法,接口中不能有构造方法。
      2. 抽象类中可以有普通成员变量,接口中没有普通成员变量
      3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
      4. 抽象类中可以包含静态方法,接口中不能包含静态方法
    • 关于访问域

      5. 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

      6. 抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
    • 关于继承

      7. 一个类可以实现多个接口,但只能继承一个抽象类。
  • 用途上的区别
    • 借助抽象类可以实现代码的重用,接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。

参考链接

https://blog.csdn.net/qq_41933748/article/details/82670072

https://www.cnblogs.com/yyy6/p/8976584.html

[Java学习]面向对象-抽象类;接口的更多相关文章

  1. java学习面向对象之接口

    上一节当中我们说道抽象类,抽象类当中的方法可以是抽象的也可以是非抽象的,那么当抽象类中所有方法都是抽象的时候,我们就可以把它重新定义为接口.代码示例: abstract class Animal { ...

  2. Java学习笔记 抽象类 接口 多态

    instanceof 对象名 instanceof 类名 该对象是否属于该类 Animal animal = new Dog(); if(animal instanceof Dog){ Dog d = ...

  3. 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装

    抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...

  4. Java 学习笔记(7)——接口与多态

    上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...

  5. python面向对象 : 抽象类(接口类),多态,封装(私有制封装)

    一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...

  6. Java学习---面向对象的远程方法调用[RMI]

    基础知识 分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果. 常见的分 ...

  7. Java学习 面向对象(下)——Java疯狂讲义th4

    面向对象(下) [TOC] 包装类 通过包装类可以把8个基本类型的值包装成对象使用. 自动拆箱.自动装箱 把字符串类型值转换成基本类型的值: 包装类的 parseXxx(String s)静态方法 包 ...

  8. java学习面向对象之异常之一

    一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...

  9. java学习——JDK1.8接口和实现类

    Java 8 新特性:接口的静态方法和默认方法 https://blog.csdn.net/sun_promise/article/details/51220518 接口的默认方法和静态方法 http ...

随机推荐

  1. BBS--后台管理页面,编辑文章,xss攻击

    1 1.对文章进行增删改查 # 后台管理url re_path(r'^cn_backend/$', views.cn_backend, name='cn_backend'), re_path(r'^c ...

  2. git使用——分支

    创建dev分支,并切换到dev分支. git checkout -b dev //Switched to a new branch 'dev' 查看分支. git branch //* dev &qu ...

  3. 18. socket io

    类似dataservice 我们socket io 和后端交互 我们也可以做成专门的service 我们先引入 为什么不是cdn呢? 因为client就是从我们的server端拿到的socket.io ...

  4. ArcGIS案例学习笔记3_1_ArcMap编辑练习

    ArcGIS案例学习笔记3_1_ArcMap编辑练习 计划时间:第三天上午 目的:ArcMap编辑练习 教程: pdf page67 数据: gis_ex10/ex07 方法: 1.新建shp文件 目 ...

  5. GIS案例学习笔记-CAD数据分层导入现有模板实例教程

    GIS案例学习笔记-CAD数据分层导入现有模板实例教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 1. 原始数据: CAD数据 目标模板 2. 任务:分5个图层 ...

  6. MVC异步控制器加载一个网页的所有内容

    public void PageAsync() { AsyncManager.OutstandingOperations.Increment(); WebRequest req = WebReques ...

  7. Python基础学习Day7 基础数据类型的扩展 集合 深浅copy

    一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...

  8. Object.keys(obj)--获取对象属性,该方法返回一个数组

    find: function(id){ var self = this; var _id = parseInt(id, 10), id = ''; Object.keys(self.data).for ...

  9. 基于docker的wekan部署

    镜像地址: https://hub.docker.com/r/wekanteam/wekan/ wiki: https://github.com/wekan/wekan/wiki#Developmen ...

  10. httpd无法加载libphp5.so模块

    安装httpd-2.2.8 和php-5.2.5,一切顺利. 最后一步重新启动apache报如下错误: httpd: Syntax error on line 53 of /usr/local/apa ...