[Java学习]面向对象-抽象类;接口
抽象类
用途
借助抽象类可以实现代码的重用。
特点
- 抽象类无法实例化。但抽象类有构造方法,在子类创建对象时用。
- 抽象类中可以定义抽象方法,不能有函数体。也只有抽象类中可以定义抽象方法。
为什么抽象类不能实例化却可以有构造方法
- super用法
super是指向父类的引用,如果构造方法没有显示地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用。如果父类由没有默认的无参构造方法,编译器就会报错,super()语句必须是构造方法的第一个子句。
定义子类的一个对象时,会先调用子类的构造函数,然后在调用父类的构造函数,如果父类函数足够多的话,会一直调用到最终的父类构造函数,函数调用时会使用栈空间,所以按照入栈的顺序,最先进入的是子类的构造函数,然后才是邻近的父类构造函数,最后再栈顶的是最终的父类构造函数,构造函数执行是则按照从栈顶到栈底的顺序依次执行.
所以父类构造方法可以写一些所有子类共有的方法,使得在子类初始化时不用每个都写同样的方法
接口
用途
- 接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。
- 使项目分层,所有层都面向接口开发。(类实现接口、类调用接口)
- 使代码间的耦合度降低。
特点
接口也是一种引用类型,可以等同看作类。
不同的,
- 接口没有构造方法。
- 接口中只能出现常量和抽象方法。接口中常量的
public static final可省略 ,抽象方法的public abstract可省略。 - 接口和接口之间可以多继承(extends)。一个类可以实现(implements)多个接口。
- 一个非抽象的类实现接口,必须将接口中的所有方法实现(即覆盖)。
为什么接口中方法和常量默认是public的,为什么接口中没有变量只有常量
- 接口是一种约束和规范,是一种更加更高级的抽象类,抽象类的方法必须是公开的,因为要给别的类去实现。此外由于子类的访问级别不能低于父类,所以子类在实现接口重写方法时的修饰符必须是public。
- 接口中没有变量的原因;既然是约束和规范,怎么能够定义一个大家都可以改的东呢。
接口与抽象类对比
- 语法的区别:
- 关于一些有的没的
- 抽象类可以有构造方法,接口中不能有构造方法。
- 抽象类中可以有普通成员变量,接口中没有普通成员变量
- 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
- 抽象类中可以包含静态方法,接口中不能包含静态方法
- 关于访问域
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学习]面向对象-抽象类;接口的更多相关文章
- java学习面向对象之接口
上一节当中我们说道抽象类,抽象类当中的方法可以是抽象的也可以是非抽象的,那么当抽象类中所有方法都是抽象的时候,我们就可以把它重新定义为接口.代码示例: abstract class Animal { ...
- Java学习笔记 抽象类 接口 多态
instanceof 对象名 instanceof 类名 该对象是否属于该类 Animal animal = new Dog(); if(animal instanceof Dog){ Dog d = ...
- 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装
抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...
- Java 学习笔记(7)——接口与多态
上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...
- python面向对象 : 抽象类(接口类),多态,封装(私有制封装)
一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...
- Java学习---面向对象的远程方法调用[RMI]
基础知识 分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果. 常见的分 ...
- Java学习 面向对象(下)——Java疯狂讲义th4
面向对象(下) [TOC] 包装类 通过包装类可以把8个基本类型的值包装成对象使用. 自动拆箱.自动装箱 把字符串类型值转换成基本类型的值: 包装类的 parseXxx(String s)静态方法 包 ...
- java学习面向对象之异常之一
一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...
- java学习——JDK1.8接口和实现类
Java 8 新特性:接口的静态方法和默认方法 https://blog.csdn.net/sun_promise/article/details/51220518 接口的默认方法和静态方法 http ...
随机推荐
- 机器学习进阶-图像基本处理-视频的读取与处理 1.cv2.VideoCapture(视频的载入) 2.vc.isOpened(载入的视频是否可以打开) 3.vc.read(视频中一张图片的读取) 4.cv2.cvtColor(将图片转换为灰度图)
1.vc = cv2.VideoCapture('test.mp4') #进行视频的载入 2.vc.isOpened() # 判断载入的视频是否可以打开 3.ret, frame = vc.read( ...
- Tomcat命令
如果原始内存不够用经常内存溢出,可以在catalina.bat中设置: 电脑2G内存的情况 :set JAVA_OPTS='-server -Xms1024m -Xmx1536m -XX:PermSi ...
- 推荐一款idea 翻译插件 ECTranslation
无意中看到一款idea翻译插件, ECTranslation,才知道有这么个东西,推荐给看到的人吧,使用简单,值得拥有. 参考:http://p.codekk.com/detail/Android/S ...
- span标签 宽度无效解决方案
完美的解决方案 下 面代码的CSS定义完美解决了span的宽度设置问题. 由于浏览器通常对不支持的CSS属性采取忽略处理的态度, 所以最好将display:inline -block行写在后面,这样在 ...
- python执行外部命令并获取输出
使用subprocess库 import subprocess out_bytes = subprocess.check_output(['netstat','-a']) out_bytes = su ...
- sublime text3:快捷键
1.就近选择相同项:ctrl+d,按住ctrl,然后多次按d,就不断往下选择相同项 2.选择所有匹配项:alt+f3,一次性选中所有匹配项 3.ctrl+shift+a:在html中同时按这三个键,则 ...
- 函数mmap()的使用
函数mmap是linux的一个系统函数.如下: 函数原型:void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t ...
- [jQ]jQuery显式操作Checkbox,并用数组存储关联值的方案
---------------------------------------------------------------------------------------------------- ...
- 手机移动端web前端常见问题整理
移动端常见问题及解决方案 一.meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="w ...
- C#自制Web 服务器开发:mysql免安装版配置步骤详解分享
mysql免安装版配置步骤详解分享 1.准备工作 下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\ mysql-noinst ...