常用类第26天(匿名内部类,Object类,getClass(),hashCode(),toString())
匿名内部类
- 没有类名的局部内部类(一切特征都与局部内部类相同)
- 必须继承一个父类或者实现一个接口
- 定义类,实现类,创建对象的语法合并,只能创建一个该类的对象
- 优点:减少代码量
- 缺点:可读性差
例:
- 创建一个Usb接口,里面有个server()方法
- 创建一个Mouse类,继承USB接口,重写server()方法
- 使用
- 创建接口类型的变量,调用service()方法
Usb usb=new Mouse();
usb.service();
- 使用局部内部类继承接口重写方法,然后使用局部内部类创建对象调用方法
//局部内部类
class Fan implements Usb{
@Override
public void service() {
System.out.println("连接电脑成功,风扇开始工作!");
}
}
//使用局部变量创建对象
Usb usb = new Fan();
usb.service();
- 使用匿名内部类优化(相当于创建了一个局部内部类)
Usb usb= new Usb() {
@Override
public void service() {
System.out.println("连接电脑成功,风扇开始工作!");
}
};
usb.service();
Object类
- 超类,基类,所有类的直接或间接父类,位于继承树的最顶层
- 任何没有写extends显示继承某个类的,都默认直接继承Object类
- Object类中所定义的方法,是所有对象都具备的方法
- Object类型可以存储任何对象
- 作为参数,可以接受任何对象
- 作为返回值,可以返回任何对象
getClass()方法
public final Class<?> getClass(){}
返回引用中存储的实际对象类型.
注意:返回值是一个Class类型的
应用:通常用于判断两个引用中实际存储对象类型是否一致.
例:创建一个Student类,实例化两个对象,通过getClass()方法判断
Student s1 = new Student("张三",15);
Student s2 = new Student("张三",15);
//通过getClass判断s1和s2是不是同一个类型
Class class1= s1.getClass();
Class class2= s2.getClass();
if(class1==class2)
{
System.out.println("s1和s2是同一个类型");
}
else {
System.out.println("s1和s2是不同一个类型");
}
hashCode()方法
public int hashCode(){}
返回该对象的哈希码值.
哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
一般情况下相同对象返回相同哈希码
Student s1 = new Student("张三",15);
Student s2 = new Student("张三",15);
Student s3=s2;
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());
在栈里定义了两个变量s2和s3,然后这两个变量都指向了堆里的同一个对象
toString()方法
public String toString(){}
返回该对象的字符串表示(表现形式)
可以根据程序需求覆盖该方法(也就是重写),如:展示对象的各个属性值
例:
Student s1 = new Student("张三",23);
Student s2 = new Student("李四",21);
System.out.println(s1.toString());
System.out.println(s2.toString());
如果不重写toString方法,将会返回该对象的地址及十六进制的哈希值,以下为toString源码
以下为运行结果:
使用Alt+Insert将toString重写之后的代码及运行结果
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?