首页 > 编程语言 >Java基础(接口)

Java基础(接口)

时间:2024-08-31 21:24:33浏览次数:10  
标签:Java age 基础 接口 height Person new public

目录

为什么要有接口

接口的定义

接口的特点

接口用interface定义

定义接口

类继承接口

接口当中只能使用抽象方法

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

一个类可以继承多个接口

实现接口中的方法

接口和接口之间可以互相继承

其他特点

抽象类与接口的区别

接口实例

实例1 Servlet

实例2 comparable接口

引用类型排序

sort方法分析

冒泡排序

快速排序


为什么要有接口

在Java中,类只支持单继承,但是有些适合,一个类需要继承多个父类来达到优化代码的效果,此时,类的单继承成了新类创建的束缚,接口的创建解决了这一问题。

接口的定义

接口是一种行为规范,一个接口中只有方法的特征和声明,没有此方法的实现,这些方法需要在不同的地方被不同的类实现,这些实现可以具有不能的功能。

接口的特点

接口用interface定义

定义接口

如下图所示,定义一个名称为动物的接口和名称为飞行的接口。

public interface Animal {
    public abstract void eat();
    public abstract void sleep();
}
public interface Flyable {
    public abstract void fly();
}

类继承接口

如下图所示,将AnimalBase类继承动物接口。

public abstract class AnimalBase implements Animal{
    @Override
    public void eat() {
        System.out.println("这是eat方法");
    }

    @Override
    public void sleep() {
        System.out.println("这是sleep方法");

    }
}

如下图所示,将bird类继承AnimalBase类和飞行接口。

public class Bird extends AnimalBase implements Flyable{
    @Override
    public void fly() {
        System.out.println("这是fly方法");
    }
}

接口当中只能使用抽象方法

接口当中只能使用抽象方法,所以不需要写abstract关键字,默认也是public访问修饰符修饰的。如下图所示,abstract关键字和public关键字都处于灰色状态,表示这个方法默认已经是abstract和public修饰的方法。

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

接口没有构造方法,接口没有办法使用new关键字开辟内存空间创建对象,但是可以使用多态。

一个类可以继承多个接口

设计接口的目的之一就是要实现Java类的多继承。由此,一个类可以继承多个接口。

实现接口中的方法

在实现(继承)接口的类中,普通类必须实现接口中的所有方法,如果不实现接口中所有的方法,那么该类是抽象类

接口和接口之间可以互相继承

接口与接口之间可以相互继承,如下所示,飞行接口继承了动物接口。

public interface Flyable extends Animal {
    public abstract void fly();
}

其他特点

接口中所有的成员变量都是由public static final修饰。

接口中的所有方法默认都是public abstract修饰。

与继承关系类似,接口与实现类之间存在多态性。

抽象类与接口的区别

抽象类是对行为的抽象,是一种模板设计。接口是一种行为规范(接口的定义)。

接口实例

实例1 Servlet

Servlet接口中有init()初始化方法、service()服务方法、destroy()销毁方法,这三个方法定义了servlet生命周期 。除此之外还有getServletConfig()方法获取servlet的配置、getServletInfo()方法获取servlet信息。

GenericServlet是一个抽象类,实现了Servlet接口中的部分方法(与生命周期相关的方法)。

HttpServlet实现了service()方法。

使用Servlet时可以继承上面的基本方法,使代码更加简洁。

实例2 comparable接口

引用类型排序

基本数据类型进行排序时,可以使用Arrays.sort()进行排序。但是将Arrays.sort()用于引用类型时,程序将会报错。

实现引用类型的排序,我们可以使用comparable接口。

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从小到大进行排序age - o.age
        //制定age从大到小进行排序o.age - age
        return age - o.age;
    }
}
public class _02 {
    public static void main(String[] args) {
        Person p1=new Person(30,180);
        Person p2=new Person(22,178);
        Person p3=new Person(27,166);
        Person p4=new Person(35,177);
        Person[] persons=new Person[]{p1,p2,p3,p4};
        Arrays.sort(persons);
        System.out.println(Arrays.toString(persons));
    }
}

程序输出:

sort方法分析

冒泡排序
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从小到大进行排序age - o.age
        //制定age从大到小进行排序o.age - age
        return age - o.age;
    }
}
public class Arrays {
 
    // 冒泡排序
    public static void sort(Comparable[] arr){
        for(int j = 0;j<arr.length;j++){
            for (int i = 0;i<arr.length-1;i++){
                if(arr[i].compareTo(arr[i+1]) >0){  // 5 -  7
                    Comparable temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
    }
 
public class _02 {
    public static void main(String[] args) {
        Person p1=new Person(30,180);
        Person p2=new Person(22,178);
        Person p3=new Person(27,166);
        Person p4=new Person(35,177);
        Person[] persons =new Person[]{p1,p2,p3,p4};
        Arrays2.sort(persons);
        System.out.println(Arrays.toString(persons));
    }
}

程序输出:

快速排序
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从小到大进行排序age - o.age
        //制定age从大到小进行排序o.age - age
        return age - o.age;
    }
}
public class Arrays {
//快速排序
    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;
        }
    }
}
public class _02 {
    public static void main(String[] args) {
        Person p1=new Person(30,180);
        Person p2=new Person(22,178);
        Person p3=new Person(27,166);
        Person p4=new Person(35,177);
        Person[] persons =new Person[]{p1,p2,p3,p4};
        Arrays3.sort(persons,0,persons.length-1);
        System.out.println(Arrays.toString(persons));
    }
}

程序输出:

至此,此篇文章结束。

标签:Java,age,基础,接口,height,Person,new,public
From: https://blog.csdn.net/weixin_74384492/article/details/141757059

相关文章

  • 信息打点-CDN绕过篇&漏洞回链接口探针&全网扫描&反向邮件
    知识点:0、CDN知识-工作原理及阻碍1、CDN配置-域名&区域&类型2、CDN绕过-靠谱十余种技战法3、CDN绑定-HOSTS绑定指向访问CDN的全称是ContentDeliveryNetwork,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更......
  • C++基础(1)——入门知识
    目录1.C++版本更新2.C++参考⽂档:3.C++书籍推荐4.C++的第⼀个程序5.命名空间5.1namespace的价值5.2namespace的定义5.3命名空间使⽤6.C++输⼊&输出7.缺省参数8.函数重载9.引⽤9.1引⽤的概念和定义9.2引⽤的特性9.3引⽤的使用9.4const引⽤ 9.5指针和引⽤的关......
  • AI产品经理薪资揭秘:起薪30k不是梦!零基础转行攻略大公开
    2024年,还有什么新风口?AI、元宇宙、NFT…很多人不知道,其实不管是元宇宙还是NFT,它们本质上就是人工智能领域。AI自身应用领域非常广泛,大批高薪岗位随之涌了出来,包括AI产品经理。AI产品经历具体工作内容是什么?薪资有多香?普通人如何进入AI人工智能行业?需要写代码吗?别急,小......
  • java异常
    1.异常概念在程序中也是一样,程序猿是一帮办事严谨、追求完美的高科技人才。在日常开发中,绞尽脑汁将代码写的尽善尽美,在程序运行过程中,难免会出现一些奇奇怪怪的问题。有时通过代码很难去控制,比如:数据格式不对、网络不通畅、内存报警等。一位好的程序猿也要学习如何处理异常,完善......
  • 全国中学基础信息 API 数据接口
    全国中学基础信息API数据接口基础数据,高校高考,提供全国初级高级中学基础数据,定时更新,多维度筛选。1.产品功能2024年数据已更新;提供最新全国中学学校基本信息;包含全国初级中学与高等中学;总计近10万条全国中学精准数据;每月一次数据自动更新校正;包含学校各类属性信息......
  • 通用 PDF OCR 到 Word API 数据接口
    通用PDFOCR到WordAPI数据接口文件处理,OCR,PDF高可用图像识别引擎,基于机器学习,超精准识别率。1.产品功能通用识别接口;支持中英文等多语言字符混合识别;formdata格式PDF文件流传参;基于机器学习不断提高的识别率;输出Word文件永久CDN存储;全接口支持HTTPS(TLSv......
  • 全国大学高校专业数据 API 接口
    全国大学高校专业数据API接口提供大学专业基础数据,持续更新,各类专业属性。1.产品功能2023年数据已更新;提供最新的全国高校专业基本信息;总计近3000条专业精准基础数据;每月一次数据更新校正;同时包含了专业开设课程列表;全接口支持HTTPS(TLSv1.0/v1.1/v1.2/v1.......
  • 网页可读内容抽取 API 数据接口
    网页可读内容抽取API数据接口智能提取文章关键元素信息,智能抽取,多种元素信息。1.产品功能智能提取网页可阅读内容;提供网页可阅读内容的HTML代码;支持传递网页HTML或网页URL参数;支持多种元素信息抽取,包括文章标题、作者、文字方向、语言、内容、内容(不包含HTML标......
  • 梁山县技工学校继续教育刷课脚本-JavaScript编写
    脚本学习网站:lsx.qzjystudy.com脚本地址:梁山县技工学校继续教育-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器为例)打开最中间那个蓝色绿色的浏览器,谷歌之类的浏览器也可以点击屏幕右上角三个点,图示位置,然后点击扩展点击获取扩展搜索Tampermonkey,并点击获取那个绿......
  • Java毕设项目II基于Java的工厂车间管理系统设计与实现
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着工业4.0时代的到来,车间管理的智能化......