【JavaSE】接口 详解(下)

这篇具有很好参考价值的文章主要介绍了【JavaSE】接口 详解(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

【JavaSE】接口 详解(下),java,开发语言

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

接口实例运用

代码举例理解

比较对象的年龄

比较对象的姓名

利用冒泡排序实现Array.sort

年龄比较器

姓名比较器

比较示例测试

clone接口

浅拷贝和深拷贝

浅拷贝

图解

代码举例

深拷贝

图解

代码举例


接口实例运用

接口实现比较引用数据类型(对于引用类型数据来说,不能直接用大于小于号来比较)

代码举例理解

这里要比较两个对象的大小(指定某种方式比较,比如 年龄等)

比较对象的年龄

package demo6;

//接口Comparable 实现 比较引用类型数据的方法,这里面的comparable 的compareTo需要重写
class Student implements Comparable<Student>{
    public String name;
    public int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

    @Override//要重写这个方法
    public int compareTo(Student o) {
    /*    if(this.age>o.age){//this表示当前对象,o表示传的参数
            return 1;
        }
        else if(this.age<o.age){
            return 0;
        }
        else{
            return -1;
        }*/
        //代码改良
        return this.age-o.age;
    }
}

public class Test6 {
    public static void main(String[] args) {
        Student student1=new Student("zhangsan",20);
        Student student2=new Student("lisi",5);
//        比较student1和student2,如果1大于2,返回大于0的数字,否则返回小于0的数字
        if(student1.compareTo(student2)>0){//调用的是student1的比较方法,传的是参数是student2
            System.out.println("student1>student2");
        }
        else{
            System.out.println("student1<=student2");
        }
    }
}

测试结果

【JavaSE】接口 详解(下),java,开发语言

比较对象的姓名

name是String类型,Java里面自带了字符串比较方法compareTo,比较的是字符串的ASCII码值

【JavaSE】接口 详解(下),java,开发语言

        @Override//要重写这个方法
    public int compareTo(Student o) {
        if(this.name.compareTo(o.name)>0){//this表示当前对象,o表示传的参数
            return 1;
        }
        else if(this.name.compareTo(o.name)==0){
            return 0;
        }
        else{
            return -1;
        }

这里有问题:Comparable接口有局限性(一旦这个类写死了比较方式,就不能随意更改)

利用冒泡排序实现Array.sort

public class Test6 {
    //冒泡排序 模拟实现引用数据类型的排序
    public static void mySort(Comparable[] comparable){
        for (int i = 0; i < comparable.length-1; i++) {
            for (int j = 0; j < comparable.length-1-i; j++) {
                if(comparable[j].compareTo(comparable[j+1])>0){
                    //交换
                    Comparable tmp=comparable[j];
                    comparable[j]=comparable[j+1];
                    comparable[j+1]=tmp;
                }
            }
        }
    }

    public static void main(String[] args) {
        Student[] students=new Student[3];
        students[0]=new Student("zhangsan",8);
        students[1]=new Student("lisi",4);
        students[2]=new Student("wangwu",10);
        mySort(students);
        System.out.println(Arrays.toString(students));
    }
    
}

代码结果(这里是根据学生的年龄排的结果)

【JavaSE】接口 详解(下),java,开发语言

年龄比较器

package demo;

import java.util.Comparator;

public class AgeComparator implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        return o1.age-o2.age;
    }
}

姓名比较器

package demo;

import java.util.Comparator;

public class NameComparator implements Comparator<Student> {
    @Override
    public int compare(Student o1,Student o2) {
        return o1.name.compareTo(o2.name);
    }
}

比较示例测试

public class Test {
    public static void main(String[] args) {

        Student student1=new Student("zhangsan",4);
        Student student2=new Student("lisi",6);

        //年龄比较器
        AgeComparator ageComparator=new AgeComparator();
        int ret=ageComparator.compare(student1,student2);
        System.out.println(ret);
        //名字比较器
        NameComparator nameComparator=new NameComparator();
        int ret2=nameComparator.compare(student1,student2);
        System.out.println(ret2);
    }

clone接口

前提:任何一个对象默认都是继承Object类的(是所有类的父类)

【JavaSE】接口 详解(下),java,开发语言

package demo3;

class Student implements Cloneable{//CloneNotSupportedException 必须实现Cloneable接口
    public int age;

    public Student(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();//Object中的clone方法使用了protected修饰,所以要重写,并用super访问
    }
}


public class Test {
    public static void main(String[] args)  throws CloneNotSupportedException {
        Student student1=new Student(10);
        Student student2=(Student)student1.clone() ;//clone是父类方法,在子类中使用要强制转换 (向下转型)
    }
}

【JavaSE】接口 详解(下),java,开发语言

浅拷贝和深拷贝

浅拷贝

两个引用指向一个对象,如两个Student指向一个Money

图解

【JavaSE】接口 详解(下),java,开发语言

代码举例

package demo3;

class Money {
    public double money=12.5;
}

class Student implements Cloneable{//CloneNotSupportedException 必须实现Cloneable接口
    public int age;
    public Money m=new Money();

    public Student(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();//Object中的clone方法使用了protected修饰,所以要重写,并用super访问

    }
}


public class Test {
    public static void main(String[] args)  throws CloneNotSupportedException {
        Student student1=new Student(10);
        Student student2=(Student)student1.clone() ;//clone是父类方法,在子类中使用要强制转换 (向下转型)
        System.out.println(student1.m.money);//12.5
        System.out.println(student2.m.money);//12.5
        System.out.println("============");
        student2.m.money=100;
        System.out.println(student1.m.money);
        System.out.println(student2.m.money);

    }
}

打印结果

这里通过对象student2修改了money,而student1的money也被修改了

【JavaSE】接口 详解(下),java,开发语言

深拷贝

两个引用指向两个对象,如两个Student指向两个个Money

图解

【JavaSE】接口 详解(下),java,开发语言

代码举例

package demo3;

class Money implements Cloneable{//表示Money支持克隆功能
    public double money=12.5;

    @Override
    protected Object clone() throws CloneNotSupportedException {//要重写克隆方法
        return super.clone();
    }
}

class Student implements Cloneable{//CloneNotSupportedException 必须实现Cloneable接口
    public int age;
    public Money m=new Money();

    public Student(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
    Student tmp=(Student)super.clone();
    tmp.m=(Money)this.m.clone();
    return tmp;
    }
}


public class Test {
    public static void main(String[] args)  throws CloneNotSupportedException {
        Student student1=new Student(10);
        Student student2=(Student)student1.clone() ;//clone是父类方法,在子类中使用要强制转换 (向下转型)
        System.out.println(student1.m.money);//12.5
        System.out.println(student2.m.money);//12.5
        System.out.println("============");
        student2.m.money=100;
        System.out.println(student1.m.money);
        System.out.println(student2.m.money);
    }
}

打印结果

这里通过对象student2修改了money,student1的money不会被修改。

【JavaSE】接口 详解(下),java,开发语言文章来源地址https://www.toymoban.com/news/detail-851485.html

到了这里,关于【JavaSE】接口 详解(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 编程开发8大语言详解,为什么Java是我最推荐的?

    很多没有接触过编程语言的同学,都会觉得编程开发特别高端和神奇,担心理解不了更担心学不会。 当然,也有人会认为,你既然是做编程的,那么你应该什么都会,什么软件的开发都能完成,这是平哥经常听到的两种声音。 在此,平哥需要给大家科普一下, 编程确实改变

    2024年02月05日
    浏览(73)
  • 【JavaSE】Java进阶知识一(泛型详解,包括泛型方法,协变,逆变,擦除机制)

    目录 泛型 1. 什么是泛型 2.泛型方法 3.通配符上界(泛型的协变) 4.通配符下界(泛型的逆变) 5.泛型的编译(擦除机制)         泛型:就是让一个类能适用于多个类型,就是在封装数据结构时能让封装的类型被各种类型使用所以引入了泛型的概念,虽然有了泛型,什么数

    2024年02月04日
    浏览(47)
  • 【javaSE】抽象类和接口(2)(接口部分)

    hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍  💥 个人主页 :E绵绵的博客 💥 所属专栏 :JAVASE题目练习

    2024年04月28日
    浏览(36)
  • 【JavaSE】接口

    接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。接口的定义格式与定义类的格式基本相同,将class换成 interface ,就定义了一个接口。 建议: 1.创建接口时,

    2024年02月11日
    浏览(31)
  • JAVASE---抽象类和接口

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为

    2024年02月09日
    浏览(42)
  • JavaSE:抽象类和接口

    目录 一、前言 二、抽象类 (一)抽象类概念 (二)使用抽象类的注意事项 (三)抽象类的作用 三、接口 (一)接口概念 (二)接口语法规则 (三)接口的使用  (四)接口特性 (五)实现多个接口 (六)接口间的继承  (七)使用接口给对象数组排序  (八)Clonabl

    2024年04月13日
    浏览(43)
  • 详解C语言单链表接口函数

    创建一个头文件(SList.h),两个源文件(SList.c和test.c) SList.h:用于包含库函数的头文件,链表节点结构体声明,接口函数的声明等【另外两个源文件要包含SList.h这个头文件,才能使用其中的声明】 SList.h:用于实现单链表的接口函数 test.c:存放main函数,用于链表的测试 ———

    2024年02月04日
    浏览(39)
  • 【JAVASE】抽象类和接口及其抽象类和接口的区别

    ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 目标: 1. 抽象类 2. 接口 3. Object 类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的, 如果 一个类中

    2024年04月13日
    浏览(53)
  • Go 语言中的接口类型转换详解

    Go 语言是一门静态类型的语言,其中类型转换是一项基本的操作。在 Go 中,接口类型转换是一种特殊的类型转换,它涉及到将一个接口类型的值转换为其他具体类型的值。这个过程涉及到类型断言(Type Assertion)和类型判断(Type Switching)。本篇博客将深入探讨 Go 语言中接口

    2024年01月21日
    浏览(54)
  • java怎么写接口,java开发api接口教程

    在大家的工作中,经常写界面。 而且,最常用的是http接口。 但是,对于初学者Java工作人员来说,写http界面还很难。 那么,用实例来说明吧。 一、建设项目 首先,生成SpringBoot项目。 省略如何构建此处,并引入相关依赖关系: org.springframework.boot artifactIdspring-boot-starter /从属

    2024年02月05日
    浏览(190)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包