JavaSEDemo08

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 类名{
    }

特点

  1. 使用abstract关键字修饰的类就是抽象类,没有这个关键字就是具体类。
  2. 如果一个类中有抽象方法,这个类必须定义成抽象类。
  3. 抽象类中既可以有抽象类,又可以有具体类
  4. 抽象类中可以没有抽象方法,只有具体方法。
  5. 抽象类不可以直接实例化,必须是其他实现类的父类。
  6. 实现类必须重写抽象类中的所有抽象方法
  7. 抽象类的具体方法子类可以不重写
  8. 抽象类的子类还可以是抽象类

抽象方法

语法

  • 语法: 权限修饰符 abstract 返回值类型 方法名称(参数列表);

特点

  1. 抽象方法没有方法体
  2. 构造方法 static final修饰的方法不可以是抽象方法
  3. 抽象方法只能存在于抽象类或接口中

接口

语法

  • 权限修饰符 interface 接口名{
    }

接口和抽象类的区别

  1. 属性: 抽象类中的属性没有限制,接口中的属性必须用public static final修饰
  2. 构造方法:抽象类中的构造方法可有可无,接口中没有构造方法
  3. 普通方法:抽象类中可以有普通方法,接口中不能有普通方法
  4. 子类:抽象类只能单一继承,接口可以多个继承

接口中的常量和方法

  • 常量必须是public static final
  • 方法必须是public abstract
  • 以上修饰符接口中可以不写,编译器自动给你加上

IDEA设置自动打印方法名字和方法参数

  • 按路径找到Files - Settings - Editor - Live Templates - output - soutm
    在这里插入图片描述
  1. 将下面的Template text:更改为System.out.println(" $ CLASS_NAME $ . $ METHOD_NAME $ ( $ ARG_NAME $ )方法");
  2. 点击Edit variables
    在这里插入图片描述
  3. 将ARG_NAME 一行的Expression选为MethodParameters() 将后面的勾选勾上
    在这里插入图片描述
  4. 效果(快捷键soutm)
    在这里插入图片描述

类继承一个父类实现多个接口

语法

权限修饰符 class 子类名称 extends 父类名称 implements 接口1,接口2,接口3…{
}

注意

子类必须重写父类和所有接口的所有抽象方法

接口继承

语法

权限修饰符 子接口名名称 extends 接口名称{
}

接口继承和类继承的比较

  • 接口可以同时继承多个接口,类一次只能继承一个。
  • 接口可以实现继承多个的原因:
  • 接口中都是抽象方法,不存在实现冲突,继承谁都可以。
  • 注意:继承时,如果方法签名(方法名称和参数列表)相同,返回值类型也要相同,否则会报错。

JDK8以上 接口中可以定义默认方法

语法

default 返回值类型 方法名称(参数列表){
方法体;
}

默认方法的调用位置

  • 接口的默认方法可以被实现类调用,可以被子接口调用
  • 注意:如果两个接口的默认方法重名,必须在子接口重写 可以通过接口名.super.方法名调用

小拓展:JDK9以上 接口中可以定义私有方法

在这里插入图片描述
编译没有报错

猜你喜欢

转载自blog.csdn.net/hypertext123/article/details/115337634
08