11_面对对象高级_接口

STK 11 DataProviders 接口解析:从报告映射到MATLAB代码的5个关键步骤 本文详细解析了STK 11中DataProviders接口的使用方法,通过5个关键步骤帮助用户从报告映射到MATLAB代码。内容涵盖DataProviders架构理解、GUI操作到代码的映射思维、复杂数据结构处理、动态参数化数据获取及性能优化策略,助力工程师高效获取卫星对象数据。 阅读详情

接口

1. 认识接口

Java 提供了一个关键字 interface ,用这个关键字我们可以定义出一个特殊的结构:接口

  • 在接口中定义的变量,默认都是常量
  • 在接口中定义的方法,默认都是抽象方法
interface A {
    // 成员变量(默认就是常量)
    String NAME = "Jack";

    // 成员方法(默认就是抽象方法)
    void goToA();
}

interface B {
    int AGE = 15;
    void goToB();
}

// Car类一旦接入了接口,意味着,它要么必须重写抽象方法,要么它变成抽象类
class Car implements A, B {

    @Override
    public void goToA() {

    }

    @Override
    public void goToB() {

    }
}

public class Test {
    public static void main(String[] args) {
        Car c = new Car();
        c.goToA();
        c.goToB();
    }
}
2. 接口的好处
  • 弥补了类单继承的不足,一个类同时可以实现多个接口
  • 让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现
public class Test {
    public static void main(String[] args) {
        Student s1 = new Child();
        Singer s2 = new Child();
        dancer s3 = new Child();
        s1.study();
        s2.sing();
        s3.dance();
    }
}

class Child extends Student implements Singer, dancer {


    @Override
    public void sing() {

    }

    @Override
    public void dance() {

    }
}

class Student {
    public void study() {

    }
}

interface Singer {
    void sing();
}

interface dancer {
    void dance();
}
3. 感受接口的魅力
import java.util.ArrayList;

// 员工类
class Staff {
    private String name;
    private double salary;

    public Staff() {

    }

    public Staff(String name, double salary) {
        this.name = name;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

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

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

// 员工管理类
class StaffManager {
    private ArrayList<Staff> list = new ArrayList<>();
    private functionInterface obj = new Operator1();  // 这行是整个代码的核心,让我们解耦合的使用接口!
//  private functionInterface obj = new Operator2();  // 想要改变业务模式,只需改变new Operator1()中的1

    public StaffManager() {
        list.add(new Staff("张三", 8000));
        list.add(new Staff("李明", 9500));
        list.add(new Staff("王刚", 7200));
        list.add(new Staff("小强", 8800));
    }

    // 输出全部员工的信息
    public void printInfo() {
        obj.printInfo(list);
    }

    // 输出全部员工的平均薪资
    public void printAverage() {
        obj.printAverage(list);
    }
}

// 接口: 定义业务要求
interface functionInterface {
    void printInfo(ArrayList<Staff> list);

    void printAverage(ArrayList<Staff> list);
}

// 操作: 实现接口的具体业务要求

// 操作1: 以xxx模式实现要求
class Operator1 implements functionInterface {

    @Override
    public void printInfo(ArrayList<Staff> list) {
        System.out.println("-------------员工信息-------------");
        for (int i = 0; i < list.size(); i++) {
            Staff s = list.get(i);
            System.out.println("姓名:" + s.getName() + " , 薪资:" + s.getSalary());
        }
        System.out.println("---------------------------------");
    }

    @Override
    public void printAverage(ArrayList<Staff> list) {
        double total = 0.0;
        for (int i = 0; i < list.size(); i++) {
            Staff s = list.get(i);
            total += s.getSalary();
        }
        double average = total / list.size();
        System.out.println("平均薪资:" + total);
    }
}

// 操作2: 以yyy模式实现要求
class Operator2 implements functionInterface {

    @Override
    public void printInfo(ArrayList<Staff> list) {
        System.out.println("-------------员工信息-------------");
        for (int i = 0; i < list.size(); i++) {
            Staff s = list.get(i);
            if (s.getSalary() > 8000) {
                System.out.println("姓名:" + s.getName() + "薪资8000+");
            } else {
                System.out.println("姓名:" + s.getName() + "薪资8000-");
            }
        }
        System.out.println("---------------------------------");
    }

    @Override
    public void printAverage(ArrayList<Staff> list) {
        double total = 0.0;
        for (int i = 0; i < list.size(); i++) {
            Staff s = list.get(i);
            total += s.getSalary();
        }
        double average = total / list.size();
        System.out.println("平均薪资:" + total);
        for (int i = 0; i < list.size(); i++) {
            Staff s = list.get(i);
            if (s.getSalary() > average) {
                System.out.println(" " + s.getName() + "已达平均薪资");
            } else {
                System.out.println(" " + s.getName() + "未达到平均薪资");
            }
        }
    }
}


public class Test {
    // 程序入口
    public static void main(String[] args) {
        StaffManager m = new StaffManager();
        m.printInfo();
        m.printAverage();
    }
}
4. 接口的细节

新增方法

  • 之前学习的接口是传统的接口,从 JDK8 开始,接口中新增了三种方法
  • 新增方法的目的是,增强接口的能力,便于项目的扩展和维护
public class Test {
    public static void main(String[] args) {
        B b = new B();
        b.test1();  // ===默认方法===
        A.test3();  // ===静态方法===
    }
}

interface A {
    // 0. 接口 interface 里面的方法,默认都会被 public 修饰
    // 原因很简单,因为接口写出来就是为了让别人使用的呀!
    // 所以下面介绍到的所有方法,除了特殊说明外,默认都是被 public 修饰了的

    // 1. 默认方法:必须使用 default 修饰
    // 它属于实例方法(对象的方法),必须使用"实现类"的对象来访问
    default void test1() {
        System.out.println("===默认方法===");
        test2();  // 私有方法只能通过内部去调用了
    }

    // 2. 私有方法:必须使用 private 修饰(JDK 9才开始支持的)
    private void test2() {
        System.out.println("===私有方法===");
    }

    // 3. 静态方法:必须使用 static 修饰
    static void test3() {
        System.out.println("===静态方法===");
    }
}

// 定义一个"实现类",用于实现A接口的方法
class B implements A {

}

接口的多继承

  • 接口的多继承:一个接口可以同时继承多个接口
  • 好处与作用:便于"实现类"去实现
interface A{
    void test1();
}
interface B{
    void test2();
}
interface C{}

// 接口的多继承
interface D extends A,B,C{

}

// D接口的"实现类"
class E implements D{

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }
}

接口的其他注意事项(了解)

  • 一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承
  • 一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现
  • 一个类继承了父类,又同时实现了接口,父类中和接口中有同名的默认方法,实现类会优先用父类的
  • 一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可
JUnit接口测试实战:从Mock对象到契约测试的完整指南 单元测试是保障软件质量的基础实践,其核心在于验证代码单元在隔离环境下的行为是否符合预期。在面向接口编程的架构中,接口作为抽象契约,其测试策略与具体类有所不同,需要借助Mock对象等技术间接验证依赖关系与行为一致性。通过Mockito等框架创建测试替身,可以精准模拟接口行为,从而隔离被测代码、验证交互逻辑并模拟各种边界场景,这对于构建高内聚、低耦合的系统至关重要。本文聚焦于JUnit框架下针对接口类测试的三大核心策略:测试具体实现类以保障功能正确性、测试依赖接口的客户端代码以实现高效隔离、以及通过契约测试确保 阅读详情

相关推荐

Oracle 11g JDBC ojdbc6驱动程序实战指南

本文还有配套的精品资源,点击获取 简介:Oracle 11g JDBC ojdbc6驱动程序是与Oracle 11g数据库通信的关键Java组件,通过JDBC接口实现Java应用程序与Oracle数据库之间的交互。该驱动程序专为Java 6环境设计,是Oracle thin驱动的实现,不依赖Oracle客户端软件,支持跨平台性能优化。开发者在使用时需要将ojdbc6.jar...

weixin_35761094的博客 1615

模块,面对对象编程,面对对象高级编程//7.11

模块类似c++里面的头文件,面对对象编程主要介绍了python里面的类的定义方法,创建语法诸如此类其中涉及到多态,我 想到了Java,c++里面的类的继承以及接口,当时也有多态,不过我书忘记在学校里,不知道,python感觉更加灵活对于类的操作也更加随意,但这节省了代码这些东西没必要细看,等到打代码打多了自然就会了当然前提是要打很多代码,...

dnsdnsduddy的博客 190

EPSON RX8010SJ RTC实战:I2C寄存器配置避坑指南(附完整初始化代码)

本文详细解析了EPSON RX8010SJ RTC芯片在I2C寄存器配置中的常见问题与解决方案,包括TEST位、STOP位和中断控制等关键配置要点。通过实战经验分享和完整的初始化代码模板,帮助开发者避免常见陷阱,确保RTC模块的稳定运行。

weixin_28678831的博客 406

c++面对对象程序设计

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

qq_49776909的博客 444

Latex小白也能搞定!5分钟教你用Overleaf打造个性化简历(附免费模板)

本文为LaTeX新手提供了一份快速上手指南,教你如何在5分钟内使用Overleaf在线平台和现成模板,轻松打造专业且个性化的简历。文章详细介绍了从选择模板、替换个人信息到进行颜色、图标等个性化调整的完整流程,让你无需深入学习LaTeX语法,即可高效制作出排版精美、脱颖而出的求职简历。

2a4s6d8f0g的博客 682

SGLang:结构化生成语言推理框架深度解读

SGLang是由斯坦福大学和加州大学伯克利分校联合提出的高性能大语言模型推理框架,针对复杂多轮对话、结构化输出等场景优化。其核心创新包括: RadixAttention机制:通过基数树数据结构实现跨请求的KV Cache自动复用,避免重复计算共享前缀 跳跃前瞻解码:对格式化输出中的固定模板部分直接填充,仅采样变量槽位,提升3-5倍生成速度 约束解码引擎:通过正则表达式和JSON Schema保证输出严格符合预定义格式 声明式DSL:提供类Python的编程接口简化复杂推理流程开发 相比传统框架,SGLang

Ricky Yang的专栏 331

面对对象

1、类里面有三种成员:属性(普通属性,静态属性),方法(普通方法,静态方法,魔术方法( __construct,__destruct,__set,__get,__isset,__unset,_call,__callStatic,__sleep,__wakeup,__clone )),常量(访问权限为public),属性和方法可以加访问权限修饰符(public,protected,pr...

weixin_30387423的博客 64

Power BI常见问题篇1:无法打开文档

Power BI常见问题篇1:无法打开文档

weixin_48273257的博客 3304

面对对象——封装,继承,多态

封装: #封装 #把数据(属性)、实现(方法、函数)放在类内部完成,对外显示一个接口(能被调用的函数)。 #也就是说,封装好的类,是一个黑盒子。 #想要做什么,直接告诉 “类” 一声,就好了,类就自动完成好了 #与函数对比,类是更高层次的封装(更高级的函数) #当然,类实现了更高层次的封装,不仅仅封装了操作,还封装了数据。 #比如,构造一个函数show(),就能够实现打印所有变量的值。而不关心变量名字等具体信息 #使用,set、get能够在设置前,对数值逻辑进行判断 构造一个类,在类中构造一个方法,能够显示

weixin_46549605的博客 2723

antdv-<a-form>的使用

是 Ant Design Vue 中用于创建表单的组件,提供了一种结构化的方式来收集用户输入。它支持多种布局、验证、数据绑定等功能,非常适合用于处理用户输入和提交数据。

2302_81312344的博客 2617

历年北京理工大学复试专业综合题

。

A place to record sth. 2万+

VISSIM 高级应用COM接口开发初级入门

目前来说,VISSIM是分析许多交通问题的一款很强大的软件工具。他可以处理的问题包括简单交叉口(单点)、城市路网、高速公路、地铁等。当 然对于一般的项目,我们掌握其基础操作,再能懂一些其他方面的应用比如VisVap、动态分配的方法就足以对付常见的仿真项目。但有时候我们要面对毕竟复 杂的、重复操作比较多的项目时,基础操作就显得力不从心了。所以用VISSIM做接口开发,可...

weixin_34032779的博客 5113

HTML满屏跳动的爱心(完整代码)

HTML语言实现满屏跳动爱心的完整代码。

AIGC 12万+

Java学习(五):面向对象进阶

5.1 概述 本章重点针对面向对象的三大特征:继承、封装、多态进行详细的讲解。另外还包括抽象类、接口、内部类等概念。 5.1.1 继承的实现 继承让我们更加容易实现类的扩展。 extends的意思是“扩展”。子类是父类的扩展。 5.1.2 instanceof 运算符 instanceof 是二元运算符,左边是对象,右边是类 当对象是右面类或子类所创建对象时,返回true;否则,返回fa...

CodePandas 875

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

6. 面对对象(高级) Part 5 --- 学习笔记

本节索引

forfan06的专栏 693

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

我的Java学习笔记 java11-面向对象

java11-面向对象1.什么是面向对象, 2.面向对象的三大特征 (抽象 继承 多态) 3.什么是封装 4.什么是对象,什么是类 5.类的声明与使用 6.构建对象的方式 7.属性安全性的设置 8.构造方法的声明与调用 回顾:java的三种引用类型: 数组 类 接口1.编程语言-高级语言C : 1968 面向过程的|C++ : 1982 面向对象|-Ja...

weixin_33964094的博客 105

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java调用vissim的com接口_VISSIM 高级应用COM接口开发初级入门

目前来说,VISSIM是分析许多交通问题的一款很强大的软件工具。他可以处理的问题包括简单交叉口(单点)、城市路网、高速公路、地铁等。当 然对于一般的项目,我们掌握其基础操作,再能懂一些其他方面的应用比如VisVap、动态分配的方法就足以对付常见的仿真项目。但有时候我们要面对毕竟复 杂的、重复操作比较多的项目时,基础操作就显得力不从心了。所以用VISSIM做接口开发,可以帮助我们更好的解决这些难题。...

weixin_36364022的博客 914

JSON11:C++11开发者的终极JSON解决方案

JSON11是一个专为C++11设计的轻量级JSON库,提供高效的JSON解析和序列化功能。作为C++开发者处理JSON数据的理想选择,它以简洁的API和现代化的C++特性,让JSON操作变得简单而高效。 ## 🌟 为什么选择JSON11? 对于C++开发者而言,处理JSON数据往往需要面对复杂的库配置和繁琐的代码实现。JSON11的出现正是为了解决这些痛点: - **超轻量级设计**:整

gitblog_00961的博客 564

033、Java面向对象技术期末复习详解

本文是Java面向对象技术的期末复习指南,分为两大部分: 第一部分(1-4章)涵盖Java编程基础: Java概述和面向对象特征(封装、继承、多态、抽象) 编程基础(变量、运算符、控制结构) 方法定义与调用(包括方法重载) 数组的使用(一维、二维数组及常用算法) 第二部分(5-8章)重点讲解面向对象核心概念: 类与对象(定义、创建和使用) 封装原理与实现 关键字this、super、static的使用 构造方法及执行顺序 包、访问控制和修饰符 继承概念与应用 方法重载与重写 抽象类与接口 Object类等。

Code is fun. 854

【万字总结】Java面向对象的学习

Java面向对象的初步学习学习(万字总结)

一起学习 440

告别手动编写:pybind11自动生成Python文档全攻略

你还在为C++与Python绑定的文档维护而头疼吗?当你修改C++函数参数却忘记同步更新Python文档时,当你面对成百上千个接口手动编写说明时,是否想过这一切都能自动化完成?本文将带你掌握pybind11文档字符串(Docstring)的自动生成技术,让你从繁琐的文档工作中解放出来,只需专注于代码逻辑,文档将随之自动更新。 ## 为什么需要自动生成文档 手动维护C++与Python绑定的文档...

gitblog_00622的博客 496

Day 11 数组 面向对象

类,是能够描述现实世界事物一组属性和行为的集合;类和事物的关系:一一对应的关系事物:一定现实真实存在的学生事物属性: 姓名,身高, 年龄 等等…行为: 主要目的学习…Java中规定,需要定义类描述这个事物 ,Java中最基本单元就是类代码体现 描述哪一个事物class 类名{ //类名:满足标识符的规范: 见名知意}...

liutao0414的博客 131

第五章 Java面向对象进阶

文章目录5.1.1 l类的继承5.1.2 instanceof 运算符5.1.4方法的重写override5.2.1 Object类基本特性5.2.2 toString方法5.2.3 ==和equals方法5.3 super关键字5.4.2 封装的实现—使用访问控制符修饰符范围限制5.4.3 封装的使用细节5.4.3 封装的使用细节5.5 多态(polymorphism)5.7 final关键字...

MaxVen 918

C++建造者模式:从复杂对象构建到流式接口实战

在软件工程中,创建型设计模式用于解耦对象的创建与使用过程,提升代码的灵活性和可维护性。建造者模式作为其中的重要成员,其核心原理是将复杂对象的构建步骤抽象化,通过分离构建过程与最终表示,允许同一构建过程创建不同的对象表示。该模式的技术价值在于有效解决了构造函数参数过多、可选参数复杂、构建顺序依赖等问题,避免了伸缩构造函数和JavaBeans模式的缺陷。在应用场景上,建造者模式特别适用于配置解析、查询构建、网络请求构造等需要分步组装复杂对象的场景。本文以C++中的计算机配置为例,深入探讨了建造者模式的经典实现与

weixin_30673611的博客 478

面对突如其来的阿里一面,我慌了!(1)

面试官:(最后是算法题,面试官的表述不是很清晰,所以开始没理解他的意思,我归纳一下题目)有1,3,7三个面值的金钱,现在要取n元。怎么取个数最少。(n是已知数) 意思就是 1 * a+3 * b+7 * c=n 什么情况(a+b+c)最小。当然这是我自己归纳出来的,他开始的描述让我想哭。回答:经常会遇到网友留言评论不知道如何准备大厂面试?如何不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。如果你的知识是一个圆,当你的圆越大时,圆

2401_84009929的博客 667
上一篇: 10_面对对象高级_抽象类
下一篇: 12_面向对象高级_内部类
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值