java基础
final
对象实例化
String
JDK,JRE,JVM区别
JDK:JAVA运行工具 JRE:JAVA运行时环境 JVM:JAVA虚拟机
重载和重写
重载和重写都是多态的表现,区别在于重载是编译时多态,重写是运行时多态。
重载
发生在同一类中,方法名相同,参数列表不同(个数,顺序,类型),返回值和访问修饰符可以不同(但不能只修改这两者,因为会造成混淆,调用方根本无法区分调用的到底是哪一个方法,会在编译时报错)
public int add(int a,int b){}; public String add(int a,int b){}; //编译时报错
重写
发生在父子类中,方法名相同, 参数列表相同,返回值,抛出异常范围小于等于父类,访问修饰符大于等于父类,如果父类的方法是private,那么子类不能重写这个方法。
接口和抽象类
- 一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
- 抽象类的成员变量可以是各种类型的,但接口的成员变量只能是 pulic static final(公共的静态的常量)。
- 抽象类中可以存在普通成员函数,而接口中只能存在 public abstract()方法
接口设计的目的,是对类的行为进行约束(更准确的说是一种“有”约束,因为接口不能规定类不可以有什么行为),也就是提供一个机制,可以强制要求不同的类具有相同的行为。它只约束了行为的有无,但不对如何实现行为进行限制
而抽象类设计的目的,是代码复用,当不同的类,具有某些相同的行为A,且其中一部分行为实现方法一致时B,可以让这些类派生于一个抽象类。在这个抽象类中实现B,避免了让所有的子类来实现B, 这就达到了代码复用的目的。而A-B的部分,留给各个子类自己实现。正是因为A-B在这里没有实现,所有抽象类不允许实例化出来(否则当调用到A-B时,无法执行)。
抽象类是对类本质的抽象,表达的是is-a的关系,比如 BMW is a car。抽象类包含并实现子类通用特性,将子类存在差异化的特征进行抽象,交由子类去实现。
接口是对行为的抽象,表达的是 like-a的关系,比如 Bird like a Aircraft(像飞行器一样可以飞),但其本质上 is a Bird。接口的核心是定义行为,即实现类可以做什么,至于实现类主体是谁,是如何实现的,接口并不关心。
使用场景:当你关注一个事务的本质,用抽象类;当你关注一个操作的时候,用接口。
==和equals的区别
== 基本数据类型,比较的是数值是否相等
引用类型,比较的是对象引用地址是否相等(栈中),在堆中是否是同一块区域
equals 只能用来判断对象是否相等(常见的是字符串是否相等)
object没有进行重写,底层原理就是==
重写之后比较的是引用对象的内容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通