文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

 Java SE面向对象编程的3个常用接口分别是什么

2023-06-26 06:39

关注

这篇文章主要为大家分析了 Java SE面向对象编程的3个常用接口分别是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“ Java SE面向对象编程的3个常用接口分别是什么”的知识吧。

1.Comparable

前言,想要排序Student.有代码:

import java.util.Arrays; class Student {    public int age;    public String name;    public double score;     public Student(int age, String name, double score) {        this.age = age;        this.name = name;        this.score = score;    }     @Override    public String toString() {        return "Student{" +                "age=" + age +                ", name='" + name + '\'' +                ", score=" + score +                '}';    }} public class TestDemo {    public static void main(String[] args) {        Student[] students = new Student[3];        students[0] = new Student(12,"niubi",99.9);        students[1] = new Student(20,"liuren",18.9);        students[2] = new Student(80,"laoren",50.9);        System.out.println(Arrays.toString(students));         Arrays.sort(students);         System.out.println(Arrays.toString(students));    }}

此代码运行报错:

 Java SE面向对象编程的3个常用接口分别是什么

原因: 没有告诉要如何进行排序,是年龄还是姓名还是分数.没有告诉比较的规则

解决方式:

如果自定义的数据类型 进行大小比较 一定要实现可以比较的接口

import java.util.Arrays; class Student implements Comparable<Student>{    public int age;    public String name;    public double score;     public Student(int age, String name, double score) {        this.age = age;        this.name = name;        this.score = score;    }     @Override    public String toString() {        return "Student{" +                "age=" + age +                ", name='" + name + '\'' +                ", score=" + score +                '}';    }     //谁调用这个方法 谁就是this    @Override    public int compareTo(Student o) {        //return this.age - o.age;//从小到大        return o.age - this.age;//从大到小    } } public class TestDemo {     public static void main(String[] args) {        Student[] students = new Student[3];        students[0] = new Student(12,"niubi",99.9);        students[1] = new Student(6,"liuren",18.9);        students[2] = new Student(80,"laoren",50.9);        System.out.println("比较前 "+Arrays.toString(students));         Arrays.sort(students);//默认从小到大排序         System.out.println("比较后 "+Arrays.toString(students));    }}

如果要 分数比较 和 姓名比较

  //谁调用这个方法 谁就是this    @Override    public int compareTo(Student o) {        //return this.age - o.age;//从小到大        //return o.age - this.age;//从大到小        return (int) (this.score - o.score);//分数排序        return this.name.compareTo(o.name);//姓名排序    }

缺点: 这个接口对类的侵入性非常强.一旦写好了,不敢轻易改动.

如何降低对类的侵入性呢?

 使用Comparator

2.Comparator 比较器

import java.util.Arrays;import java.util.Comparator; class Student1 {    public int age;    public String name;    public double score;     public Student1(int age, String name, double score) {        this.age = age;        this.name = name;        this.score = score;    }     @Override    public String toString() {        return "Student{" +                "age=" + age +                ", name='" + name + '\'' +                ", score=" + score +                '}';    }} class AgeComparator implements Comparator<Student1>{    @Override    public int compare(Student1 o1, Student1 o2) {        return o1.age - o2.age;    }} class ScoreComparator implements Comparator<Student1>{    @Override    public int compare(Student1 o1, Student1 o2) {        return (int) (o1.score - o2.score);    }} class NameComparator implements Comparator<Student1>{    @Override    public int compare(Student1 o1, Student1 o2) {        return o1.name.compareTo(o2.name);    }} public class TestDemo1 {     public static void main(String[] args) {        Student1[] students1 = new Student1[3];        students1[0] = new Student1(12,"niubi",99.9);        students1[1] = new Student1(6,"liuren",18.9);        students1[2] = new Student1(80,"laoren",50.9);        System.out.println("比较前 "+Arrays.toString(students1));         AgeComparator ageComparator = new AgeComparator();        Arrays.sort(students1,ageComparator);        System.out.println("比较后(按年龄) "+Arrays.toString(students1));         ScoreComparator scoreComparator = new ScoreComparator();        Arrays.sort(students1,scoreComparator);        System.out.println("比较后(按姓名) "+Arrays.toString(students1));         NameComparator nameComparator = new NameComparator();        Arrays.sort(students1,nameComparator);        System.out.println("比较后(按分数) "+Arrays.toString(students1));    }}

运行结果:

 Java SE面向对象编程的3个常用接口分别是什么

优点:对类的侵入性非常弱.

3.Cloneable

面试问题:

你知道Cloneable接口吗?为啥这个接口是一个空接口?有啥作用?

空接口 -> 标志接口 -> 代表当前这个类是可以被克隆的.

class Person implements Cloneable{    public int age ;    public void eat(){        System.out.println("吃!");    }     @Override    public String toString() {        return "Person{" +                "age=" + age +                '}';    }     @Override    protected Object clone() throws CloneNotSupportedException {        return super.clone();    }}public class TestDemo2 {    public static void main(String[] args) throws CloneNotSupportedException {        Person person = new Person();        person.age = 99;        Person person2 = (Person) person.clone();        System.out.println(person.age);        System.out.println(person2.age);         System.out.println("==========");        person2.age = 199;        System.out.println(person.age);        System.out.println(person2.age);    }}

运行结果:

 Java SE面向对象编程的3个常用接口分别是什么

注意事项:

关于“ Java SE面向对象编程的3个常用接口分别是什么”就介绍到这了,更多相关内容可以搜索编程网以前的文章,希望能够帮助大家答疑解惑,请多多支持编程网网站!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯