当前位置: 首页 > news >正文

java接口

为什么会有接口:
java的继承问题:一个子类只能继承一个父类( java的单继承
接口: 一个子类可以实现多个接口
接口本身是抽象的,在其中的方法是抽象方法,变量是抽象
特征
  • 接口用interface实现,子类继承用implements
  • 接口中所有的成员变量都是由public static final修饰的(公有的静态常量)
  • 接口中所有的方法默认都是由public abstract修饰的(抽象方法)

  • 接口当中也是没有构造器的,不能被实例化
  • 接口当中的方法全部都是抽象方法,和抽象类不一样
  • 接口和接口之间可以互相继承(继承的本质:代码的复用) 用extends,任何实现子接口的类都需要实现父接口和子接口内的方法(抽象的)
接口是对方法的抽象, 子类必须实现父类的抽象方法
排序:实现comparable接口,重写里面的抽象方法,实现自定义排序。
Person 与compareTo里面的类型对应
从小到大:(从大到小的话反过来o.age-age)
Arrays.sort(数组名)
Arrays.sort() 是一个通用的排序方法,用于对数组进行排序。它的实现依赖于对象的比较能力。具体来说:
  • 如果数组中的元素是基本数据类型(如 int[]、double[] 等),Arrays.sort() 会直接比较它们的值。
  • 如果数组中的元素是对象类型(如 Integer[]、String[] 或自定义类的数组),Arrays.sort() 会检查这些对象是否实现了 Comparable 接口。
接口本身不能被实例化,但可以作为引用类型来引用实现了该接口的对象。Comparable[]。要求这个类型必须实现Comparable接口
Comparable[] 是一个数组,它的元素类型是Comparable 接口。这意味着这个数组可以存储任何实现了Comparable 接口的对象。例如:
Comparable[] arr = {new Integer(5), new String("abc"), new Person("Alice", 25)};
在这个数组中:
  • Integer 实现了 Comparable 接口。
  • String 实现了 Comparable 接口。
  • Person(假设它实现了 Comparable 接口)也实现了 Comparable 接口。
虽然这些对象是不同类型,但它们都实现了 Comparable 接口,因此可以存储在同一个 Comparable[] 数组中。

接口和抽象类的区别?

抽象类一般作为 父类实现。
抽象类之所以被提出来,原因之一是: 子类会重写父类的方法和变量
抽象类之所以被提出来,原因之二是: 将子类当中共性的代码进行提取
抽象类只需要做 方法的定义,不需要实现。只要继承抽象类, 子类必须实现父类(抽象类)中的抽象方法
抽象类的特点:
  1. abstract 修饰的类叫抽象类,由 abstract 修饰的方法叫抽象方法
  2. abstract修饰的抽象方法,不在抽象类当中去实现,更多的作为子类必须实现的方法的定义
  3. 抽象类当中才能有抽象方法,普通类当中不能有抽象方法
  4. 抽象类当中不一定全是抽象方法,也可以使用普通方法,普通方法可以不用重写
  5. 抽象类不能被实例化(不能创建它的对象),原因在于没有构造器
  6. final 不能和 abstract 同时使用:final关键字作用在类上面不能被继承,final关键字作用在方法上面不能被重写,会冲突
  7. 抽象方法不能使用static,static是针对类层次,抽象方法是针对对象层次的,所以不能一起使用。
  8. 子类继承抽象类后,如果不想实现抽象类中的抽象方法,那么子类必须是个抽象类
  9. 抽象类一定是父类
public class OuterClass {
    static abstract class AbstractStaticInnerClass {
        static void staticMethod() {
            System.out.println("Static method in abstract static inner class");
        }

        abstract void abstractMethod();
    }

    public static void main(String[] args) {
        AbstractStaticInnerClass.staticMethod(); // 调用静态方法
        ConcreteStaticInnerClass concrete = new ConcreteStaticInnerClass(); // 创建静态内部类的实例
        concrete.abstractMethod();
    }
}

class ConcreteStaticInnerClass extends OuterClass.AbstractStaticInnerClass {
    void abstractMethod() {
        System.out.println("Implemented abstract method");
    }
}

相关文章:

  • DeepSeek教unity------Dotween
  • 部署postgresql_exporter监控pgsql
  • mysql增加字段操作以及关键字报错
  • MATLAB中regexpi函数用法
  • 想要追踪一个在传送带上运动的东西,该怎么选择工业相机呢,需要考虑哪些因素
  • 国产Linux OS:网络性能调优关键内核参数
  • 【医学影像AI】50个眼科影像数据集(1)分类任务
  • 软件测试技术之跨平台的移动端UI自动化测试(上)
  • VSCode 中使用 Snippets 设置常用代码块
  • 数据结构:顺序表(Sequence List)及其实现
  • Natural Language Processing NLP
  • Ubuntu轻松部署ToolJet低代码开发平台结合内网穿透远程访问
  • Blackbox.AI:高效智能的生产力工具新选择
  • 实用且美观,一款简单且模块化的UI组件库!
  • 【Linux】【网络】Libevent 内部实现简略版
  • CentOS 7.8 安装MongoDB 7 副本集(Replica Set)
  • Datablau产品全面接入DeepSeek
  • DeepSeek 服务器繁忙的全面解决方案
  • Firebase详解及使用方法
  • openGauss 3.0 数据库在线实训课程18:学习视图管理
  • 本周看啥|《歌手》今晚全开麦直播,谁能斩获第一名?
  • 英国6月初将公布对华关系的审计报告,外交部:望英方树立正确政策导向
  • A股三大股指低收:汽车股领涨,大金融走弱,两市成交近1.1万亿元
  • 车建兴被留置:跌落的前常州首富和红星系重整迷路
  • 俄外交部:俄乌伊斯坦布尔谈判改在当地时间15日下午举行
  • 美国与卡塔尔签署超2435亿美元经济及军事合作协议