ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Java学习博客|抽象类 + 接口 + 比较器 2026.09.12

Java学习博客|抽象类 + 接口 + 比较器 2026.09.12 今日学习内容抽象类、接口基础、二者区别以及两个对象比较接口Comparable与Comparator。一、抽象类 abstract如果一个类没办法描述一个具体的事物就可以定义为抽象类。举例子Animal动物类是抽象概念不能直接new必须被子类继承。1. 抽象方法public abstract void draw();没有方法体没有具体实现用abstract修饰。规则抽象方法必须写在抽象类中方法要加abstract2. 重要知识点1. 抽象类不一定包含抽象方法。一个类只要加了abstract它就是抽象类可以全部都是普通成员。2. 抽象类里面可以和普通类一样拥有成员变量、普通成员方法。3. 抽象类不能直接实例化不能new。◦ 但是它有构造方法供子类super()调用。◦ 抽象类最大的意义用来被继承作为父类定义规范。4. 继承规则考试重点◦ ✅ 普通类继承抽象类如果父抽象类含有抽象方法普通子类必须重写全部抽象方法其余普通方法按需选择。◦ ✅ 抽象类继承抽象类可以不重写父类抽象方法重写也可以自由选择。◦ 多层继承举例普通C → 抽象B → 抽象A最终普通类C必须重写A、B里面所有未被重写过的抽象方法。一旦某一层已经重写子类就不用重复重写。5. 限制static、final、private不能修饰抽象方法。抽象方法的目的就是留给子类重写这三个关键字都会阻止重写冲突。6. 抽象类同样支持向上转型、多态和普通类继承逻辑一致。二、接口 interface接口可以理解为类的公共规范属于一种引用数据类型。使用关键字interface定义。接口核心规则1. 接口内的抽象方法默认自带 public abstract可以省略不写。void draw(); //等价 public abstract void draw();2. 接口的成员变量默认自带 public static final是常量定义就要赋值。int a 10; //等价 public static final int a 10;3. JDK8新增default默认方法可以在接口里写带有方法体的实现实现类可以直接继承也可以重写。4. 接口不能实例化不能new但是支持向上转型。5. 类实现接口使用关键字 implementspublic class Rect implements IShape{//必须重写接口里面全部抽象方法}规则如果类实现接口但是没有实现接口中全部抽象方法这个类必须定义成抽象类接口的强大之处解决Java单继承局限Java的类和类之间只能单继承但是一个类可以同时实现多个接口。写法class A extends B implements C,D先继承父类再实现多个接口。继承 vs 实现思想区别• 继承extends关注 是不是属于这个种类is-a• 接口implements关注 有没有具备这个功能has-a类和类继承类和接口实现接口和接口继承接口之间可以多继承三、对象比较Comparable Comparator普通引用对象不能直接用 比较需要专门定义比较规则两套方案内部比较器、外部比较器。1. Comparable 内部比较器让实体类自己实现Comparable接口属于内置比较规则。• 方法compareTo(Object o)• 使用student1.compareTo(student2)// 写在Student类内部Overridepublic int compareTo(Student o){return this.age - o.age;}返回值规则• 返回正数this o• 返回负数this o• 返回0两者相等缺点规则写死在实体类内部不方便随时切换比较逻辑比如一会比年龄一会比姓名2. Comparator 外部比较器更灵活单独新建一个比较器类第三方来比较两个对象不改动原来Student类代码。• 方法compare(o1, o2)• 可以创建多个比较器年龄比较器AgeComparator、姓名比较器NameComparator随时切换。示例按名字String比较public class NameComparator implements ComparatorStudent {Overridepublic int compare(Student o1, Student o2) {return o1.getName().compareTo(o2.getName());}}注意数字属性直接相减String字符串属性调用compareTo()不能直接相减四、拓展Cloneable接口与对象拷贝1. Cloneable接口介绍Cloneable是标记接口接口里面没有任何抽象方法。如果想要一个类支持克隆就需要实现Cloneable接口否则调用clone()方法会抛出CloneNotSupportedException克隆不支持异常。• 调用方式对象.clone()native本地方法底层由C/C实现快速复制对象。2. 浅拷贝 vs 深拷贝✅ 浅拷贝默认clone就是浅拷贝1. 拷贝基本数据类型直接复制值互不干扰。2. 拷贝引用类型成员变量只复制引用地址不会新建内部对象。原始对象和克隆后的对象共享同一个内部子对象。如果修改内部引用对象的属性两个对象会一起变化。举个例子Student里面有Address地址对象浅拷贝后原学生和克隆学生指向同一个Address。修改地址两个学生的地址同时改变。✅ 深拷贝复制的时候所有引用类型成员全部新建独立对象。原始对象与克隆对象完全独立修改任意一方内部的引用对象不会互相影响。3. 两者核心对比浅拷贝 深拷贝基本类型 复制值 复制值引用类型 复制地址共用子对象 创建全新子对象完全隔离默认clone() 浅拷贝 需要自己手动实现4. 小结1. Cloneable是标记接口没有抽象方法仅做标记。2. 不实现Cloneable调用clone会抛异常。3. Object自带的clone()默认是浅拷贝。4. 深拷贝需要手动处理内部引用类型重新new对象
返回列表