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

White graces:个人主页

专栏推荐:Java入门知识

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

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


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

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

思维导图

巧用抽象类与接口,打造高效Java程序(下)_第1张图片


一.多接口

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

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

1.多接口语法

举例: class Dog extends Animal implements Running, Swimming 

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

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

⬇️详情看下图⬇️

巧用抽象类与接口,打造高效Java程序(下)_第2张图片

2.接口间的继承

(1). 语法

举例: interface Action extends Running, Swimming

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

⬇️详情看下图⬇️

巧用抽象类与接口,打造高效Java程序(下)_第3张图片

(2). Clonable接口

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

➡️Clonable接口里面有clone方法

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

⬇️使用方法⬇️

package Test;

import java.util.Arrays;

class Person implements Cloneable {
    public String name; //Person类,含有姓名、年龄,并且实现了Clonable接口
    public int age;
    public Person (String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override  //Clonable接口含有clone方法, 需要重写,通过super调用
    protected Object clone() throws CloneNotSupportedException {
        return super.clone(); //throw CloneNotSupportedException 是不支持克隆异常
    }
}
public class test {                  //处理这个异常只需要在main函数后面延伸就可以,表示声明异常
    public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person("空白",18);
        Person person2 = (Person) person1.clone(); //因为clone方法返回类型是object类,所以需要进行强转
        System.out.println(person1);
        System.out.println(person2);
    }
}

巧用抽象类与接口,打造高效Java程序(下)_第4张图片

(3). 克隆不支持异常

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

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

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

巧用抽象类与接口,打造高效Java程序(下)_第5张图片


(4).浅拷贝和深拷贝

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

巧用抽象类与接口,打造高效Java程序(下)_第6张图片

⬇️运行结果⬇️

巧用抽象类与接口,打造高效Java程序(下)_第7张图片

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

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

⬇️深拷贝的实现⬇️

巧用抽象类与接口,打造高效Java程序(下)_第8张图片

巧用抽象类与接口,打造高效Java程序(下)_第9张图片


二.抽象类和接口的区别

巧用抽象类与接口,打造高效Java程序(下)_第10张图片


三.Object类

1.特点

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

2.Object类方法

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

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

巧用抽象类与接口,打造高效Java程序(下)_第11张图片


(1).toString方法

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

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

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

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

巧用抽象类与接口,打造高效Java程序(下)_第12张图片

(3). 重写toString方法

package Test;

import java.util.Arrays;
import java.util.Scanner;
class Person {
    String name;
    int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {   //重写toString方法,将name和age同时打印出来
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class test {
    public static void main(String[] args) {
        Person person = new Person("张三",10);
        System.out.println(person.toString());
    }
}

巧用抽象类与接口,打造高效Java程序(下)_第13张图片


(4). equals方法

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

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

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

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

巧用抽象类与接口,打造高效Java程序(下)_第14张图片

(5). 重写equals方法

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

package Test;

import java.util.Arrays;
import java.util.Objects;
import java.util.Scanner;
class Person {
    String name;
    int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {  //空指针直接返回false
            return false ;
        }
        if(this == obj) {  //二者地址相同
            return true ;
        }
        if (!(obj instanceof Person)) {  //如果obj不能转成Person类,
            return false;                // 而现在要和Person类比较,不是Person类,那二者肯定就不相等了
        }
        Person person = (Person) obj;   //转成Person类之后进行比较
        return (this.name.equals(person.name) && this.age == person.age);
        //这里调用的是String里的equals方法
    }
}
public class test {
    public static void main(String[] args) {
        Person person1 = new Person("张三",10);
        Person person2 = new Person("张三",10);
        System.out.println(person1.equals(person2));

    }
}

巧用抽象类与接口,打造高效Java程序(下)_第15张图片


 四.结语+美图分享


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

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

✔️✔️✔️✔️

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

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

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

‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️

你可能感兴趣的:(java,开发语言)