首页 > 其他分享 >Interface接口----一种行为规范

Interface接口----一种行为规范

时间:2024-09-02 22:25:06浏览次数:14  
标签:实现 接口 public ---- Person Interface 抽象类 排序 行为规范

什么是接口?

抽象类和接口有些类似,通过对比抽象类,我们能更好的了解接口的特点。

抽象类VS接口

抽象类

1.抽象类有抽象方法,定义抽象方法是因为有些方法时不需要父类去实现的,只是需要子类根据自己的功能进行实现。

2.抽象类是对行为(方法)的一种抽象(只定义不实现),抽象类本身是用来提取一些共性的东西,将大家共有的东西抽象出来,相当于是一种模板设计,当子类都重写父类的同一个方法时,只需要在父类当中进行方法的定义。

3.抽象类当中可以使用抽象方法和普通方法

接口

1.而接口是一种行为规范(一种定义),接口当中只能使用抽象方法,所以不需要写abstract关键字,默认是abstract修饰的.,默认是public 访问修饰符修饰的。

2.接口类不能创建对象,只能使用多态

3.接口是可以多继承的,一个类可以实现多个接口(设计接口的目的之一,就是要实现java类的多继承),实现接口就可以实现接口当中的方法

4.接口只是对方法进行定义,并不实现某一个方法(只定义不实现)

示例

定义一个接口Animal

public interface Animal {
    public abstract void run();//接口当中只能使用抽象方法,默认为public abstract 所以不需要写abstract关键字,默认是public修饰的
}

定义一个接口A

package JieKou;

public interface A {
    public abstract void fly();
}

定义一个Cat类实现这两个接口

package JieKou;

public class Cat implements A,Animal{//接口是可以多继承的,一个类可以实现多个接口
    @Override
    public void fly() {

    }

    @Override
    public void run() {

    }
}

接口和抽象类的使用

在进行项目的代码是实现时,我们所创建的类通常需要继承HttpServlet,

只有继承HttpServlet,才可以使用doGet doPost方法,从而接受前端传来的数据

HttpServlet

HttpServlet是一个抽象类,并且继承GenericServlet

GenericServlet类

GenericServlet类也是一个抽象类

它实现了三个接口,Serialzable是序列化接口,ServletConfig是配置接口,我们进一步查看Servlet接口当中的内容

 Servlet接口

通过图表描述当前接口和抽象类的关系

查看Servlet接口

分析接口和抽象类之间的联系
  • Servlet接口是定义生命周期的
  • GenericServlet实现了Servlet接口除了service方法之外其他的关于生命周期的方法
  • 实现接口,接口当中的方法必须去实现,如果不想实现,就将子类设置为抽象类
  • HttpServlet实现了service方法
  • 我们自定义的Servlet类通过继承的方式,使用到上述类和接口中定义或实现的所有方法。

结论

抽象类设计的目的之一,是更好的实现接口中定义的方法。

接口的应用-----对象的排序

1.数组的排序

通过sort方法进行数组数据从小到大排序

public class Test {
    public static void main(String[] args) {
       int[] arr=new int[]{5,9,6,2,8,7,1};
        Arrays.sort(arr);//排序
        System.out.println(Arrays.toString(arr));//输出
        

    }
}

执行结果:

2.对象的排序

直接按照数组的方式进行排序后,报错

分析原因:无法转换comparable接口,该接口是用来排序的,但是对象类型是无法进行排序的,无法调用方法进行排序

如果想让对象进行排序,我们需要让Person类实现Compare接口,并且实现接口定义compareTo方法

数值类型的数据才能进行排序,所以我们在实现compareTo方法时,要指定数值类型

Person类实现compareTo方法的代码

package work0829;

public class Person implements Comparable<Person>{
    private Integer age;
    private  Integer height;

    public Person(int age, int height) {
        this.age = age;
        this.height = height;
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", height=" + height +
                '}';
    }
 //实现排序的核心代码
    @Override
    public int compareTo(Person o) {//数值类型才能进行排序
        //指定age从小到大排序
        return age-o.age;
        //指定age从大到小排序:age-o.age
    }
}
结论

如果想对类中对象进行排序,只需要让类实现Compare接口,并且实现Compare当中的compareTo方法

我们再次运行Test测试类

然后我们查看Arrays.sort方法的实现

元素自然进行顺序进行升序排序必须数组中所有的元素必须实现comparable接口。Comparable接口如果是对象类型的话,是无法实现comparable接口的,需要手动去实现.

sort具体实现的排序方案

我们继续探索排序方案

利用快速排序重写sort方法
package work0829;

public class Arrays1 {
    public static void sort(Comparable[] arr, int left, int right) {
        if (left >= right) {
            return;
        }
        Comparable base =  arr[left];
        int i = left;
        int j = right;
        while (i != j) {
            while (arr[j].compareTo(base)>=0 && i < j) {
                j--;
            }
            while (arr[i].compareTo(base) <= 0 && i < j) {
                i++;
            }
            Comparable temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;


        }
        arr[left] = arr[i];
        arr[i] = base;
        sort(arr, 0, i - 1);
        sort(arr, i + 1, right);
    }
}
为什么定义Compare类型的数组

因为要进行对象的排序,必须要实现Compare接口,不管是什么类的对象,都可以利用多态向上转型,都可以统一用Compare类型的数组进行接收。

执行结果

利用冒泡排序重写sort方法
package work0829;

public class Arrays2 {
    public static void sort(Comparable[] arr){
        for (int j=0;j<arr.length;j++) {


            for(int i = 0;i+1<arr.length;i++){
                if (arr[i].compareTo(arr[i+1])>0){
                    Comparable temp = arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=temp;
                }
            }
        }
    }
}

 执行结果

package work0829;

import JieKou.A;

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        Person p1=new Person(21,182);//创建对象
        Person p2=new Person(20,188);
        Person p3=new Person(22,181);
        Person p4=new Person(22,185);
        Person[] persons=new Person[]{p1,p2,p3,p4};
        Arrays.sort(persons);
        Arrays1.sort(persons,0,persons.length-1);//快速排序
        //Arrays2.sort(persons);//冒泡排序
        System.out.println(Arrays.toString(persons));

    }
}

 最终,我们发现sort方法中的排序方案是冒泡排序

欢迎大家点赞,收藏,评论加关注呦!!!

标签:实现,接口,public,----,Person,Interface,抽象类,排序,行为规范
From: https://blog.csdn.net/2301_81453175/article/details/141781805

相关文章

  • 学习C语言之分支与循环(上)桀桀桀
     晚上好各位,桀桀桀。上面就是我们今天的内容了话不多说,开干。    <一>、if语句1.if语句的语法形式如下:if(表达式) 语句表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式......
  • Fabric.js全面介绍:强大的交互式图形编辑框架
    在前端开发中,图形界面的创建与编辑一直是开发者们关注的重点。随着Web技术的不断发展,HTML5Canvas提供了一个强大的画布功能,然而其API相对低级,操作复杂图形和高级交互时显得力不从心。这时,Fabric.js应运而生,它是一款基于HTML5Canvas的JavaScript库,为开发者们提供了一个简......
  • Python中的集合魔法:解锁高效数据处理的秘密
    引言集合是一种不允许重复元素的数据结构,并且其内部元素无序排列。这种特性使得集合在某些场景下表现得极为出色:去重:快速去除列表或数组中的重复项。交集、并集、差集等运算:用于比较两个或多个集合间的关系,非常适用于权限控制、用户管理等领域。性能优势:相较于列表,集合......
  • 开发团队如何应对突发的技术故障与危机:策略与实践
           ......
  • Python机器学习:基础、算法与实战
    1:《Python机器学习:基础算法与实战》内容简介本书基于 Python 语言,结合实际的数据集,介绍了机器学习算法以及数据分析方法的应用。本书主要包含两部分内容,第一部分为 Python 机器学习入门知识:主要介绍了 Python 基础内容、Numpy与Pandas 库数据操作、Matplotlib 与Seaborn......
  • 前端宝典二十五:vue2高阶用法mixin、transition、slot
    本文主要探讨vue2中几个高阶的用法:mixin、transition、slot一、mixin在Vue中,mixin(混入)是一种用于在多个组件之间共享代码的机制。它允许你定义可重用的选项对象,并将其混入到不同的组件中。1、使用方法创建一个混入对象:constmyMixin={data(){return{......
  • Python中的函数艺术:解锁高效编程的秘密
    引言在软件开发过程中,重复使用相同的代码段是不可避免的。这不仅增加了代码量,还可能导致维护困难。通过定义函数,我们可以将这些重复代码抽象出来,封装成一个可重用的组件。这样做的好处显而易见:减少了代码冗余、提高了代码的复用性,同时也使得程序结构更加清晰。此外,在团队协作时,良......
  • Python机器学习:基础算法与实战-内容介绍
    1:《Python机器学习:基础算法与实战》内容简介本书基于 Python 语言,结合实际的数据集,介绍了机器学习算法以及数据分析方法的应用。本书主要包含两部分内容,第一部分为 Python 机器学习入门知识:主要介绍了 Python 基础内容、Numpy与Pandas 库数据操作、Matplotlib 与Seaborn......
  • 12个好用的电脑录屏软件新鲜出炉!2024最新录屏排名榜看这里!
    录屏软件千千万,但是专业的太难,业余的套路又太多,如果你没有接触过,肯定会耗费大量的时间,今天俺就推荐国内外最主流的10款录屏工具,让你不用再自己去找到头秃,话不多说,一起看看呗!No.1ApowerREC地址:https://www.apowersoft.cn非常知名的一款老牌录屏工具啦,也有不少大佬分享过,而且......
  • 【Intel Hackathon大赛】基于OpenVINO™ Model Optimizer + ChatGLM-6B + P-Tuning的A
    随着人工智能技术的飞速发展,自然语言处理(NLP)领域迎来了前所未有的变革,而大语言模型(LargeLanguageModel,LLM)作为这一变革的核心驱动力,正逐步成为连接人类语言与机器智能的桥梁。LLM通过海量文本数据的学习,掌握了丰富的语言知识、上下文理解能力以及生成高质量文本的能力,为智能教......