Java基础 8.18

1.接口注意事项和细节

  1. 接口不能被实例化
  2. 接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰
  3. 一个普通类实现接口,就必须将该接口的所有方法都实现(快捷键alt+enter)
  4. 抽象类实现接口,可以不用实现接口的方法
  5. 一个类同时可以实现多个接口
  6. 接口中的属性,只能是final的,而且是 public static final 修饰符 比如:int a=1; 实际上是 public static final int a=1;(必须初始化)
  7. 接口中属性的访问形式:接口名.属性名
  8. 接口不能继承其它的类,但是可以继承多个别的接口

2.接口和类继承之间的比较

package com.logic.interface_;

public class ExtendsVsInterface {
    public static void main(String[] args) {
        LittleMonkey littleMonkey = new LittleMonkey("wukong");
        littleMonkey.climbing();
        littleMonkey.swimming();
        littleMonkey.flying();
    }
}

interface Fish {
    void swimming();
}

interface Bird {
    void flying();
}

class Monkey {
    private String name;

    public Monkey(String name) {
        this.name = name;
    }

    public void climbing() {
        System.out.println("猴子会爬树...");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class LittleMonkey extends Monkey implements Fish, Bird {
    public LittleMonkey(String name) {
        super(name);
    }

    @Override
    public void swimming() {
        System.out.println(getName() + "通过学习在游泳...");
    }

    @Override
    public void flying() {
        System.out.println(getName() + "通过学习在飞翔...");
    }
}

接口和继承解决的问题不同

继承的价值主要在于:解决代码的复用性可维护性

接口的价值主要在于:设计,设计好各种规范(方法),让其它类去实现这些方法

接口比继承更加灵活

接口比继承更加灵活,继承是满足is-a的关系,而接口只需满足like-a的关系

接口在一定程度上实现代码解耦(接口规范性+动态绑定机制)

3.接口的多态

多态参数(前面案例体现)

在前面的Usb接口案例,UsbInterface usb,既可以接收手机对象,又可以接收相机对象,就体现了 接口 多态(接口引用可以指向实现了接口的类的对象)

多态数组

演示一个案例:给Usb数组中,存放Phone和相机对象,Phone类还有一个特有的方法cal,请遍历Usb数组,如果是Phone对象,除了调用Usb 接口定义的方法外,还需要调用Phone 特有方法call

package com.logic.interface_;

public class InterfacePolyArr {
    public static void main(String[] args) {

        //多态数组 -> 接口类型数组
        Usb[] usbs = new Usb[2];
        usbs[0] = new Phone_();
        usbs[1] = new Camera_();
        /*
        给Usb数组中,存放 Phone  和  相机对象,Phone类还有一个特有的方法call(),
        请遍历Usb数组,如果是Phone对象,除了调用Usb 接口定义的方法外,
        还需要调用Phone 特有方法 call
         */
        for (int i = 0; i < usbs.length; i++) {
            usbs[i].work();//动态绑定..
            //和前面一样,我们仍然需要进行类型的向下转型
            if (usbs[i] instanceof Phone_) {//判断他的运行类型是 Phone_
                ((Phone_) usbs[i]).call();
            }
        }

    }
}

interface Usb {
    void work();
}

class Phone_ implements Usb {
    public void call() {
        System.out.println("手机可以打电话...");
    }

    @Override
    public void work() {
        System.out.println("手机工作中...");
    }
}

class Camera_ implements Usb {

    @Override
    public void work() {
        System.out.println("相机工作中...");
    }
}

接口存在多态传递现象

package com.logic.interface_;

/**
 * 演示多态传递现象
 */
public class InterfacePolyPass {
    public static void main(String[] args) {
        //接口类型的变量可以指向,实现了该接口的类的对象实例
        IG ig = new Teacher();
        //如果IG 继承了 IH 接口,而Teacher 类实现了 IG接口
        //那么,实际上就相当于 Teacher 类也实现了 IH接口.
        //这就是所谓的 接口多态传递现象.
        IH ih = new Teacher();
    }
}

interface IH {
    void hi();
}

interface IG extends IH {
}

class Teacher implements IG {
    @Override
    public void hi() {
    }
}

Elasticsearch 8.18 是一个重要的版本更新,带来了多项新功能、改进和优化,以增强其作为分布式搜索和分析引擎的能力。以下是一些关键的更新亮点: ### 新功能 - **原生连接 (Native Joins)** Elasticsearch 8.18 引入了 LOOKUP JOIN 这一新的 ES|QL 命令,用于执行左连接 (left joins),以增强数据的查询能力。该功能允许用户根据定义的匹配标准,将一个索引中的文档与另一个索引中的文档进行组合和查询。这种动态关联方式在查询时进行跨索引文档的关联,减少了数据冗余,提高了数据管理效率[^2]。 - **向量搜索增强** 8.18 版本进一步增强了向量数据库功能,支持更大规模的向量数据存储与检索,优化了向量相似性搜索的性能,使得在推荐系统、图像检索等场景中的应用更加高效。 - **增强的 REST API** 新版本对 REST API 进行了多项增强,包括更灵活的查询参数、更高效的响应格式以及更好的错误处理机制,提升了开发者的使用体验。 ### 性能改进 - **查询性能优化** 在 8.18 版本中,Elasticsearch 对查询执行路径进行了优化,减少了不必要的计算和内存分配,从而提升了复杂查询的响应速度。 - **分片管理改进** 引入了更智能的分片分配策略,提升了大规模集群中的分片均衡性和恢复效率,降低了因节点故障导致的集群不稳定风险。 - **内存使用优化** 对 JVM 内存的使用进行了优化,减少了堆内存的消耗,提高了系统的稳定性和可扩展性。 ### 安全与管理 - **增强的安全功能** 8.18 版本在安全方面进行了多项改进,包括更细粒度的角色权限控制、增强的审计日志功能以及对 TLS 1.3 的支持,提升了系统的整体安全性。 - **监控与诊断工具升级** 提供了更全面的监控指标和诊断工具,帮助管理员更好地理解集群状态,快速定位和解决问题。 ### 升级指南 - **兼容性注意事项** 在升级到 8.18 之前,建议检查当前使用的插件和索引格式是否与新版本兼容。某些旧版本的 API 可能已被弃用或移除,需进行相应的代码调整。 - **配置更新建议** 推荐根据新版本的特性调整集群配置,例如启用新的分片分配策略、优化线程池设置等,以充分发挥新版本的性能优势。 - **测试与回滚计划** 在生产环境中部署前,应在测试环境中充分验证新版本的功能和性能。同时,制定详细的回滚计划,以防升级过程中出现不可预见的问题。 ```bash # 示例:设置环境变量以运行 Elasticsearch 8.18 export ES_JAVA_HOME=/data/elasticsearch-8.18.2/jdk/ export ES_HOME=/data/elasticsearch-8.18.2 source .bash_profile ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值