文章目录
Object类的几个方法的使用或重写
equals
比较两个对象的虚地址
hashCode
- 直接输出对象 对象调用的hashCode得到的哈希码值不同
public class Test {
public static void main(String[] args) {
User user = new User();
System.out.println(user);//输出的是User类的所在路径以及十六进制哈希码
System.out.println(user.hashCode());//输出的是十进制哈希码
}
}
程序运行结果
User@66048bfd
1711574013
-
hashCode方法一般和equals方法一起重写
-
IDEA快速生成equals和hashCode方法的重写
-
右键Generate(快捷键Alt+insert)打开图中的这一项
-
重写后的hashCode方法的执行过程
finalize
- 该方法一般不重写
- 如果必须要重写,记得加上super.finalize();
- 回收垃圾 积攒到一定程度时回收 根据不同电脑的内存定
抽象类
语法
- 语法:权限修饰符 abstract class 类名{
}
特点
- 使用abstract关键字修饰的类就是抽象类,没有这个关键字就是具体类。
- 如果一个类中有抽象方法,这个类必须定义成抽象类。
- 抽象类中既可以有抽象类,又可以有具体类
- 抽象类中可以没有抽象方法,只有具体方法。
- 抽象类不可以直接实例化,必须是其他实现类的父类。
- 实现类必须重写抽象类中的所有抽象方法
- 抽象类的具体方法子类可以不重写
- 抽象类的子类还可以是抽象类
抽象方法
语法
- 语法: 权限修饰符 abstract 返回值类型 方法名称(参数列表);
特点
- 抽象方法没有方法体
- 构造方法 static final修饰的方法不可以是抽象方法
- 抽象方法只能存在于抽象类或接口中
接口
语法
- 权限修饰符 interface 接口名{
}
接口和抽象类的区别
- 属性: 抽象类中的属性没有限制,接口中的属性必须用public static final修饰
- 构造方法:抽象类中的构造方法可有可无,接口中没有构造方法
- 普通方法:抽象类中可以有普通方法,接口中不能有普通方法
- 子类:抽象类只能单一继承,接口可以多个继承
接口中的常量和方法
- 常量必须是public static final
- 方法必须是public abstract
- 以上修饰符接口中可以不写,编译器自动给你加上
IDEA设置自动打印方法名字和方法参数
- 按路径找到Files - Settings - Editor - Live Templates - output - soutm
- 将下面的Template text:更改为System.out.println(" $ CLASS_NAME $ . $ METHOD_NAME $ ( $ ARG_NAME $ )方法");
- 点击Edit variables
- 将ARG_NAME 一行的Expression选为MethodParameters() 将后面的勾选勾上
- 效果(快捷键soutm)
类继承一个父类实现多个接口
语法
权限修饰符 class 子类名称 extends 父类名称 implements 接口1,接口2,接口3…{
}
注意
子类必须重写父类和所有接口的所有抽象方法
接口继承
语法
权限修饰符 子接口名名称 extends 接口名称{
}
接口继承和类继承的比较
- 接口可以同时继承多个接口,类一次只能继承一个。
- 接口可以实现继承多个的原因:
- 接口中都是抽象方法,不存在实现冲突,继承谁都可以。
- 注意:继承时,如果方法签名(方法名称和参数列表)相同,返回值类型也要相同,否则会报错。
JDK8以上 接口中可以定义默认方法
语法
default 返回值类型 方法名称(参数列表){
方法体;
}
默认方法的调用位置
- 接口的默认方法可以被实现类调用,可以被子接口调用
- 注意:如果两个接口的默认方法重名,必须在子接口重写 可以通过接口名.super.方法名调用
小拓展:JDK9以上 接口中可以定义私有方法
编译没有报错