• 巧用抽象类与接口,打造高效Java程序(下)


    🙉专栏推荐:Java入门知识🙉

    🙉 内容推荐:巧用抽象类与接口,打造高效Java程序(上)🙉

    🐹今日诗词:登锋履刃何妨马革裹尸🐹


    ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏

    ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏

    🌸思维导图🌸


    🌸一.多接口🌸

    💬前面我们了解类与类之间是单继承关系 , Java不支持多继承

    ➡️ 但是一个类可以有多个接口,可以通过接口模拟实现多继承

    🍺1.多接口语法🍺

    💬举例: class Dog extends Animal implements Running, Swimming 

    ➡️解释: 狗类继承了动物类, 并且实现(implements)了跑(Running) 和 游泳(Swimming)

                  两个接口实现多个接口中间用逗号隔开

    ⬇️详情看下图⬇️

    🍺2.接口间的继承🍺

    💧(1). 语法

    💬举例: interface Action extends Running, Swimming

    ➡️解释: 动作接口(Action)继承了跑(Running) 和 游泳(Swimming) 两个接口

    ⬇️详情看下图⬇️

    💧(2). Clonable接口

    💬这是Java内置的接口, 用途非常广泛。

    ➡️Clonable接口里面有clone方法

    ➡️clone方法作用: 对 对象进行拷贝

    ⬇️使用方法⬇️

    1. package Test;
    2. import java.util.Arrays;
    3. class Person implements Cloneable {
    4. public String name; //Person类,含有姓名、年龄,并且实现了Clonable接口
    5. public int age;
    6. public Person (String name, int age) {
    7. this.name = name;
    8. this.age = age;
    9. }
    10. @Override
    11. public String toString() {
    12. return "Person{" +
    13. "name='" + name + '\'' +
    14. ", age=" + age +
    15. '}';
    16. }
    17. @Override //Clonable接口含有clone方法, 需要重写,通过super调用
    18. protected Object clone() throws CloneNotSupportedException {
    19. return super.clone(); //throw CloneNotSupportedException 是不支持克隆异常
    20. }
    21. }
    22. public class test { //处理这个异常只需要在main函数后面延伸就可以,表示声明异常
    23. public static void main(String[] args) throws CloneNotSupportedException {
    24. Person person1 = new Person("空白",18);
    25. Person person2 = (Person) person1.clone(); //因为clone方法返回类型是object类,所以需要进行强转
    26. System.out.println(person1);
    27. System.out.println(person2);
    28. }
    29. }

    💧(3). 克隆不支持异常

    throws CloneNotSupportedException: 克隆不支持异常,💬差个眼后面我们另起炉灶叙。

    出现这个异常的原因: 这是一个检查性异常,调用clone方法需要实现Clonable接口,如果没有实现接口或者重写接口方法导致检查不通过,就会出现异常。

    解决方法: Java异常处理规范,将这个异常声明出来就可以了


    💧(4).浅拷贝和深拷贝

    ⬇️我们看下面这串代码⬇️

    ⬇️运行结果⬇️

    ➡️这种情况就是浅拷贝,此时二者的money指向同一个地方

    ➡️相反,深拷贝不仅将name和money拷贝,而且把money指向的内容也拷贝了一份

    ⬇️深拷贝的实现⬇️


    🌸二.抽象类和接口的区别🌸


    🌸三.Object类🌸

    🍁1.特点🍁

    💬Object类是所有类的父类,任何类都默认继承Object类

    🍁2.Object类方法🍁

    💬既然是最高类,里面总会有一些好用的方法,这些方法基本都需要我们去重写。

    ⬇️下面我们来看一看⬇️


    🍷(1).toString方法

    ➡️作用: 将对象的内容以字符串的形式打印出来

    ➡️语法: 方法名.toString()    即可调用toString方法

    ➡️注意: 一般需要重写Object的toString方法

    ⬇️为什么需要重写呢?⬇️

    🍷(3). 重写toString方法

    1. package Test;
    2. import java.util.Arrays;
    3. import java.util.Scanner;
    4. class Person {
    5. String name;
    6. int age;
    7. public Person(String name, int age) {
    8. this.name = name;
    9. this.age = age;
    10. }
    11. @Override
    12. public String toString() { //重写toString方法,将name和age同时打印出来
    13. return "Person{" +
    14. "name='" + name + '\'' +
    15. ", age=" + age +
    16. '}';
    17. }
    18. }
    19. public class test {
    20. public static void main(String[] args) {
    21. Person person = new Person("张三",10);
    22. System.out.println(person.toString());
    23. }
    24. }


    🍷(4). equals方法

    ➡️作用: 比较两个对象是否相等

    ➡️语法: 对象一.equals(对象二)

    ➡️注意: equals一般也需要重写

    ⬇️我们来看看equals底层代码⬇️

    🍷(5). 重写equals方法

    ⬇️代码下面有图片解析⬇️

    1. package Test;
    2. import java.util.Arrays;
    3. import java.util.Objects;
    4. import java.util.Scanner;
    5. class Person {
    6. String name;
    7. int age;
    8. public Person(String name, int age) {
    9. this.name = name;
    10. this.age = age;
    11. }
    12. @Override
    13. public boolean equals(Object obj) {
    14. if (obj == null) { //空指针直接返回false
    15. return false ;
    16. }
    17. if(this == obj) { //二者地址相同
    18. return true ;
    19. }
    20. if (!(obj instanceof Person)) { //如果obj不能转成Person类,
    21. return false; // 而现在要和Person类比较,不是Person类,那二者肯定就不相等了
    22. }
    23. Person person = (Person) obj; //转成Person类之后进行比较
    24. return (this.name.equals(person.name) && this.age == person.age);
    25. //这里调用的是String里的equals方法
    26. }
    27. }
    28. public class test {
    29. public static void main(String[] args) {
    30. Person person1 = new Person("张三",10);
    31. Person person2 = new Person("张三",10);
    32. System.out.println(person1.equals(person2));
    33. }
    34. }


     🌸四.结语+美图分享🌸


    ✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄

    ⭐️点赞收藏加关注,学习知识不迷路⭐️

    🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉

    👍😏⛳️点赞 ☀️收藏⭐️关注😏👍

    👍😏⛳️点赞 ☀️收藏⭐️关注😏👍

    👍😏⛳️点赞 ☀️收藏⭐️关注😏👍

    🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️

  • 相关阅读:
    面试题泄漏|offer妥妥到手
    解决AndroidStudio 提交代码到github失败的问题
    【HarmonyOS】鸿蒙操作系统架构
    剑指 Offer 67. 把字符串转换成整数
    蓝桥杯比赛 NOC竞赛C++项目选择题真题和模拟题汇总
    微服务保护--Sentinel
    阿里最新分享的《多线程核心技术第三版》神书就此霸榜GitHub,3天点击量已破百万
    Linux系统日志/文件操作命令
    了解单域名证书和通配符证书的区别,选择合适的SSL证书解决方案
    互联网社交礼仪:我到底该怎么笑才对
  • 原文地址:https://blog.csdn.net/qq_34471880/article/details/132716176