Java基础 抽象类和接口的区别、equals 与 == 的区别
一、抽象类和接口有什么区别
抽象类与接口都用于抽象,但是抽象类可以有自己的部分实现,而接口规范某一行为,调用者实现这个接口。
主要区别:
1、抽象类还是类只能单继承,而接口却可以多实现。
2、抽象类满足所有类的属性,但是不可以被实例化。但它含main方法的话可以被调用。而接口不能实例化对象,没有构造方法,不能包含成员变量,除了static和final变量。
3、接口的成员变量和方法必须是public修饰。
4、抽象类中的方法可以有方法体,实现方法的具体功能,而接口不能。
分析:
实际上二者的使用动机不同进而使设计思想也不同。
抽象类实际上就是对一类事物的抽象,运用抽象类即可以预先留可能行为,让继承的类去实现,亦可以直接实现引用。而接口则完全就是为了被调用而设计,当这一方法的实现改变的时候只需要改变实现类中重写的这个方法即可。而且接口并没有实例化创建构造方法,一个类可以实现多个接口,对实现接口的方法进行内容编辑。
二、equals与==的区别
上面两个都是用来比较是否相等,==是值等,equals是内容相等。
分析:
在这里也要讲一下Java的内存,以后会在博客里面详细将,这里主要针对equals和==来说一下:
Java运行时的内存是分:方法区,虚拟机栈区,堆区,程序计数器,本地方法栈。
通常我们new 的类存储的内容存放在堆存储区中。例如:
String test= new String("abc");
test则存储在栈区中,“abc”则存储在开辟的堆中。
当使用equals时,例如:String test2 = new String("a");
test2.equals(test);//表明在test2在栈中的索引所指向堆内存中内容是否等于test索引所指向的堆内存中的内容
下面是String中的equals的源码,可以看出equals是拿出一个对象的内容去比较是否相等,相等返回true不等返回false。
而用== 比较的则是栈的内容。
if(test==test2)//这样比较的的是test的地址和test2的地址是否相等。
这个地址肯定是false,因为两个test开辟了两个堆空间地址肯定是不一样的
若 String test 1= “a”;
String test3 ="a" ;
此时 if(test1==test3) //此时“a”是存放在常量池中,(常量池是方法区的一部分)因为a相同,所以test3和test1指引的是同一地址,所以他们二者的值也相等结果为true。若test3 ="abc",的话在创建的过程中因为内容不同所以"abc"在常量池中与“a”的地址不同即结果为false。
基本类型判断相等只能用==。例如:
int a = 3; int b = 4;
Java基础 抽象类和接口的区别、equals 与 == 的区别相关推荐
- [Java基础]抽象类和接口的区别
抽象类和接口的区别:
- Java基础(抽象类和接口)
Java基础 1.抽象类 ①抽象类是对类的抽象,比如波斯猫和加菲猫都属于猫这个类的类对象,猫.狗.鸟又可以抽象为动物这个大类,动物这个类可以被看成是抽象类. ②抽象类的定义: 定义类时在class前面 ...
- java基础-抽象类和接口
我们从我们实际设计场景中来切入这个话题 先来举一个简单的例子: 狗都具有 eat() .sleep() 方法,我们分别通过抽象类和接口定义这个抽象概念 //通过抽象类定义public abstract ...
- Java基础361问第5问——equals和==的区别
判断两个数或者两个对象是否相等,我们一般使用equals或者==比较,但是为什么String字符串的比较一般使用equals而基本数据类型的比较使用= =呢? 先说结论 1 equals是方法,==是 ...
- [Java基础]抽象类和接口名作为形参和返回值
- Java基础学习第十二讲:Java面向对象---抽象类和接口
Java面向对象-抽象类和接口 一.抽象类 抽象的定义: 我们在日常生活中,经常通过总结一些事物的共性来对事物进行分类,这种共性可能是一些相同的属性,也可能是一些相同的动作.通过总结,我们能够清晰的划 ...
- Java中抽象类和接口在概念、语法和应用上的区别和关系
2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...
- 关于Java中抽象类和接口的一点思索
Java中抽象类和接口的一点思索 成员方法上的区别: 1. java中的抽象类可以提供成员方法的实现细节,抽象方法只能是被public和protected来修饰 配合abstract关键字,子类需要实 ...
- Java基础之String,StringBuilder,StringBuffer三者的区别
Java基础之String,StringBuilder,StringBuffer三者的区别 目录 运行速度方面 线程安全方面 小结 1. 运行速度方面 运行速度,在这方面运行速度快慢为:StringB ...
最新文章
- 去除Coding4Fun中MessagePrompt的边框(Border)
- 基尼指数——基尼系数是指国际上通用的、用以衡量一个国家或地区居民收入差距的常用指标。基尼系数介于0-1之间,基尼系数越大,表示不平等程度越高。...
- nginx重定向到其他url方法_高级开发必须掌握Nginx之四,if、set、return
- 2021 年最值得了解的 Node.js 工具
- 设计模式之- 外观模式(Facade Pattern)
- 前端学习(2633):父子传值
- 京东家电渠道赋能战略加速落地,助力家电品牌打通人、货、场间隔
- python yaml
- PyTorch:全局函数
- Linux下编译OpenSSL
- 中国正从法律入手编织公民信息保护网
- 【读论文】一种半监督文本分类方法:MixText
- linux0.11内存memory.c一些函数的简单的注释(一)
- 在线医疗系统(毕设)
- 超详细的Android so库的逆向调试
- Python读取dll库报错:[WinError 126]找不到指定的模块
- 汇编语言环境准备-《汇编语言-王爽老师》
- SNS游戏-使用Json作为缓存数据格式
- VLOOKUP函数具体操作及注意事项
- js高级-正则表达式
热门文章
- python PyQt5 sizeHint()
- 卷积神经网络 全连接层(稠密层)是什么?(全连接层就是每一个结点都与上一层的所有结点相连的网络层)
- 在EXCEL里如何输入X的平方
- 当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现
- 王道计算机考研 计算机组成原理 第二章、数据的表示和运算
- 黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程(复合选择器,元素显示模式,背景)
- 欢迎使用Markdown
- Java进阶:Set、Map线程安全问题
- html经典上中下三段的布局设计
- 史上最详细Docker搭建Redis Cluster集群环境 值得收藏 每步都有图,不用担心学不会