中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

?Java?SE面向對象編程的3個常用接口分別是什么

發布時間:2022-01-17 19:37:52 來源:億速云 閱讀:335 作者:柒染 欄目:開發技術

這篇文章主要為大家分析了 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個常用接口分別是什么

注意事項:

  • 1.引用的對象要想被克隆,必須實現Cloneable接口.

  • 2.必須重寫克隆方法,并且聲明異常.

關于“ Java SE面向對象編程的3個常用接口分別是什么”就介紹到這了,更多相關內容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請多多支持億速云網站!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岐山县| 蓬莱市| 正宁县| 萨嘎县| 黄浦区| 吉首市| 宜良县| 通许县| 沅江市| 宁乡县| 万年县| 龙井市| 佳木斯市| 青海省| 微山县| 寻甸| 海伦市| 永和县| 定陶县| 昭通市| 达拉特旗| 醴陵市| 那曲县| 云龙县| 深泽县| 英山县| 华蓥市| 阿克陶县| 镇江市| 九台市| 肇东市| 松溪县| 固镇县| 磐石市| 北京市| 固安县| 布拖县| 兴安盟| 荃湾区| 嘉禾县| 嘉义市|