java笔记:接口的特征和使用

2023-11-17

接口

1.接口的定义

【修饰符】interface 接口名 extends 父接口1,父接口2{
    零个到多个常亮定义
    零个到多个抽象方法定义
    零个到多个内部类 接口 枚举定义
    零个到多个默认方法或类方法定义.
}

*修饰符可以为public或者省略(default),如果省略了public,默认使用包权限访问控制符(在相同包结构才可以访问接口)

*一个接口可以有多个直接父接口,但是接口只能继承接口,不能继承类

*接口定义的只是一种规范,所以接口中不能包含构造器和初始化块定义,接口中可以包含成员变量(静态常量),方法(抽象实例方法,类方法或者默认方法),内部类(内部接口,枚举等)定义

*接口中的成员变量默认使用public static final进行修饰

2.接口是什么

接口定义的是一些多个类共同的公共行为规范(内部的修饰符均为public),这些规范是和外界沟通的通道

 

3.接口的多继承

接口相较于类而言,可以实现多继承

package demo01;

public class Client {
	interface interfaceA{
		int PROP_A=5;
		void testA();
	}
	interface interfaceB{
		int PROP_B=6;
		void testB();
	}
	interface interfaceC extends interfaceA,interfaceB{
		int PROP_C=7;
		void testC();
	}
	public static void main(String[]args){
		System.out.println(interfaceC.PROP_A);
		System.out.println(interfaceC.PROP_B);
		System.out.println(interfaceC.PROP_C);
		
	}

}

4.如何使用接口?

接口不能用来创建实例,但是接口可以用于声明引用类型变量,必须引用到其实现类的对象,借口的主要用途就是被实现类实现

*定义变量,也可以用来进行强制类型转换

*调用接口中定义的常量

*被其他类实现

 

5.接口和抽象类的区别

相同点:

接口和抽象类都不能被实例化,它们位于继承树的顶端,用于被其他类进行实现和继承

接口和抽象类中都可以包括抽象方法,实现接口或继承抽象类的普通子类必须实现抽象方法

 

不同点:

接口体现的是一种规范,规定了必须向外部实现哪些服务(以方法的形式),对于接口的调用者而言,接口规定了调用者可以进行调用哪些服务,如何调用这些服务。当在一个程序中进行调用时,接口是多个模块的耦合标准,当在多个程序中进行调用时,接口是多个程序之间的通信标准

 

抽象类作为多个子类的父类,体现的是一种模板设计

*接口中只有抽象和默认方法,抽象类中可以包含普通方法

*接口中不能有静态方法,抽象类中可以

*接口中只能定义静态常量,不能定义普通成员变量,抽象类中均可

*接口中无构造器,抽象类中可以提供为其他类调用的构造器

*接口中没有初始化块,抽象类中可以包含初始化块

 

6.面向接口编程(简单工厂模式)

package com.lz.factory.simplefactory;

public interface Car {
    public void run();
}

package com.lz.factory.simplefactory;

import com.lz.factory.factorymethod.Audi;
import com.lz.factory.factorymethod.Byd;
import com.lz.factory.factorymethod.Car;
import com.lz.factory.factorymethod.Farri;

public class CarFactory {
    public static Car createCar(String type){
        if("奥迪".equals(type)){
            return new Audi();
        }else if ("比亚迪".equals(type)){
            return new Byd();
        }else if("法拉利".equals(type)){
            return new Farri();
        }
        else{
            return null;
        }
    }

    public static Car createAudi(){
        return new Audi();
    }
    public static Car createFarri(){
        return new Farri();
    }
}

package com.lz.factory.simplefactory;

import com.lz.factory.factorymethod.Car;

public class Farri implements Car {
    @Override
    public void run() {
        System.out.println("法拉利在跑");
    }
}

package com.lz.factory.simplefactory;

import com.lz.factory.factorymethod.Car;

/*
* 如果不使用工厂模式 需要依赖很多项
* **/
public class Client01 {//调用者
    public static void main(String[]args){
//        Car c1=new Audi();
//        Car c2=new Byd();
//        c1.run();
//        c2.run();
        //简单工厂模式
        Car c1=CarFactory.createCar("奥迪");
        c1.run();
        Car c2=CarFactory.createCar("比亚迪");
        c2.run();
        Car c3=CarFactory.createCar("法拉利");
        c3.run();
        Car c4=CarFactory.createAudi();
        c4.run();
    }
}

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java笔记:接口的特征和使用 的相关文章

  • 了解java

    目录 一 Java是什么 二 Java语言特性 1 简单性 2 面向对象 3 健壮性 4 多线程 5 可移植性 跨平台 三 Java两种核心机制 1 Java虚拟机 Java Virtal Machine 2 垃圾收集机制 Garbage
  • 黑马程序员---从头开始,回忆JAVA基础之JAVA用十六进制表示浮点数的方法

    在二进制文件中 存储数据的格式为16进制 下面举例说明27 0f在二进制文件中怎么表示 float 共计32位 折合4字节 由最高到最低位分别是第31 30 29 0位 31位是符号位 1表示该数为负 0反之 30 23位 一共8位是指数位
  • Java学习笔记 --- 布尔类型

    一 布尔类型 1 布尔类型也叫boolean类型 boolean类型数据只允许取值true和false 无null public class Bool public static void main String args boolean
  • 动力节点老杜java基础视频笔记第一章 学前准备 (1)

    课堂截图 为什么使用截图工具 在听课的过程中 有的时候老师操作的比较快 通过截图的方式将老师的操作保存下来 以便后期的操作 另外截图之后的图片也可以用于笔记的记录 在笔记当中最好采用图文并茂的方式 这样更加利于知识的回顾 使用哪个截图工具
  • java中的file.encoding属性到底由什么决定?

    首先先上一段代码 public class PropertiesTest public static void main String args System out println file encoding System getProp
  • 对象数组题目 Student类

    package object oriented02 对象数组题目 定义类的Student 包含三个属性 学号为number 年级为state int 成绩为score int 创建20个学生对象 学号为1到20 年级和成绩都是随机产生 问题
  • 【java基础】 方法,实参和形参,方法的重载,签名,递归

    目录 方法概念及使用 实参和形参的关系 重要 方法的重载 方法签名 简单了解 递归 简单介绍 方法概念及使用 方法就是一个代码片段 类似于 C 语言中的 函数 作用 是能够模块化的组织代码 当代码规模比较复杂的时候 做到代码被重复使用 一份
  • JAVA获取类的类对象的三种方式

    自定义一个类 MyClass 并声明该类的对象 class MyClass MyClass mClass1 new MyClass 1 2 3 在上面说过 Class 类的构造方法是私有的 只有 java 虚拟机可以调用该方法创建该类的对象
  • 《编写高质量代码:改善Java程序的151个建议》读书笔记

    编写高质量代码 改善Java程序的151个建议 秦小波 67个笔记 前言 本书附带有大量的源码 下载地址见华章网站www hzbook com 建议11 养成良好习惯 显式声明UID SerialVersionUID 也叫做流标识符 Str
  • java 泛型 作用与定义

    1 泛型方法的定义和使用 public static void main String args throws ClassNotFoundException String str get 哈士奇 world System out print
  • MVC模型图

    MVC图
  • Java中count++的坑

    最近做了一道题 非常容易落入陷阱 当count初始值为0 count count 和count count 运行出来的结果是不一样的 count count 运行出来的结果依旧为0 这是因为JVM运行时 会把count变量拷贝到到临时变量区
  • jeecgboot问题解决方案

    常见问题Q A JEECG老版在线文档 点击进入 1 后台访问提示token错误 报错截图 解决方案 JeecgBoot后台的所有请求访问 增加了token机制 所以不能直接访问后台 而需要通过前台登录才能访问 默认前台访问地址 http
  • Java 泛型 T,E,K,V,?

    泛型带来的好处 在没有泛型的情况的下 通过对类型 Object 的引用来实现参数的 任意化 任意化 带来的缺点是要做显式的强制类型转换 而这种转换是要求开发者对实际参数类型可以预知的情况下进行的 对于强制类型转换错误的情况 编译器可能不提示
  • Java对象的快速复制的几种方式

    浅拷贝 深度复制 BeanUtils copyProperties 对象的克隆是指创建一个新的对象 且新的对象的状态与原始对象的状态相同 当对克隆的新对象进行修改时 不会影响原始对象的状态 注释 clone 是object类的protect
  • 多线程下载文件(支持暂停、取消、断点续传)

    多线程下载文件 支持暂停 取消 断点续传 多线程同时下载文件即 在同一时间内通过多个线程对同一个请求地址发起多个请求 将需要下载的数据分割成多个部分 同时下载 每个线程只负责下载其中的一部分 最后将每一个线程下载的部分组装起来即可 涉及的知
  • java动态代理简单实例

    java动态代理简单实例 package hello import java lang reflect InvocationHandler import java lang reflect Method import java lang r
  • Java处理SSH-免密登录

    前提 需要测试主机之间能够免密 配置ssh请自行百度 jar包 旧版 com jcraft jsch 仅支持老版的密钥格式 旧版本 RSA
  • mysql无法连接问题及其环境变量配置

    问题 Can t connect to MySQL server on localhost 3306 10061 方案一 不推荐 第一 在环境变量 系统变量的path中添加mysql的bin目录 我的是D mysql mysql 8 0 2
  • 黑豹程序员-字符串中查找出重复的字符串

    Collections frequency codeList element 字符串element 在codeList集合中重复的次数 List

随机推荐

  • Vue3.0开发之整合vue-admin-template模板

    起源 vue admin template模板算是一个比较好的前端开发模板 不过作者好像没有出vue3 0版本的 所以刚好自己在学习vue3 0 就想到开发一个vue3 0的模板 当然大部分代码都是参照vue admin template模
  • Threejs入门教程

    一 本地搭建Threejs官方文档网站 1 官网地址 Github https github com mrdoob three js 我们可以直接下载压缩包并解压或使用 git clone
  • python批量提取视频帧

    python批量提取视频帧 python批量提取视频帧 两种提取方式 按帧数提取 每个视频提取固定帧数 若所取帧数超过视频总帧数 则截取视频所有帧 按时间间隔提取 每个time提取一帧 1 使用示例 python video set py
  • 平衡小车设计_4_PID实现

    平衡小车设计 4 PID实现 参考平衡之家的算法实现 首先明确三个环的PID都是位置式PID 1 角度环 PD g tPidA actual roll g tPidA err g tPidA actual g tPidA set g tPi
  • Ubuntu20.04 搭建repo + gitlab的代码管理系统

    Ubuntu20 04 搭建repo gitlab的代码管理系统 1 为什么要用gitlab GitLab 是一个用于仓库管理系统的开源项目 使用Git作为代码管理工具 并在此基础上搭建起来的Web服务 安装方法是参考GitLab在GitH
  • 算法基础:k最近邻算法

    本博客所有内容均整理自 算法图解 欢迎讨论交流 了解过机器学习这个概念 一定知道有一种名为k最近邻的算法 简称KNN 对于k最近邻算法的定义 百度百科是这样给出的 K最近邻 k Nearest Neighbor KNN 分类算法 是一个理论
  • 异常类的定义、种类、抛出、声明和捕获

    目录 异常类定义 异常处理的必要性 异常处理 Java常见异常种类 1 Error 2 Exception 1 运行异常类Runtime Exception 2 非运行异常类Non RuntimeException 常见异常类 抛出异常th
  • 大话oracle rac 集群,大话Oracle RAC:集群、高可用性、备份与恢复

    第1部分 集群理论篇 第1章 RAC初体验 2 1 1 本书使用环境 3 1 1 1 硬件环境 3 1 1 2 软件环境 4 1 1 3 本书使用的环境 6 1 2 如何在PC机上搭建RAC环境 8 1 2 1 需要下载的软件 8 1 2
  • 拒绝服务攻击 - 学习笔记

    拒绝服务攻击 学习笔记 前言 概述 拒接服务攻击是目前来说 较为难以防御的攻击方式之一 其防御的难点在于难以分辨 正常用户与恶意用户 同时 随着攻击模式的进步 花样也越来越多 但是 服务器方也升级了安全策略 传统上 单机的 Dos 攻击已经
  • java设计6大原则总结

    1 开闭原则 Open Close Principle 定义 一个软件实体如类 模块和函数应该对扩展开放 对修改关闭 开放 封闭原则的意思就是说 你设计的时候 时刻要考虑 尽量让这个类是足够好 写好了就不要去修改了 如果新需求来 我们增加一
  • 【亲测有效新手教程】Vscode连接远程服务器编辑并运行深度学习代码

    文章目录 前言 使用步骤 1 安装OpenSSH 2 安装Remote SSH 参考链接 前言 在服务器上通过桌面已经配置好了深度学习的环境 并且存放了相关代码以及数据集 之前使用向日葵连接服务器进行代码编写 使用下来发现有延迟 不够丝滑
  • Kotlin如何提供与Java的100%互操作性?

    Kotlin与Java可以100 互操作 当您在每篇博客文章 社区话题或YouTube上首次搜索有关Kotlin的信息时 如果该话题是关于Kotlin的 那么这个词肯定在每个人的名单上都表明Kotlin可与Java 100 互操作 让我们看
  • 几个值得研究的工具

    一 DLIB库 C 实现的机器学习算法库 有离线的人脸识别SDK 比openCV里的人脸识别库效果好 除了这个库 要找到合适的离线版本的人脸识别库很难 国内的阿里 腾讯 百度 都没有离线SDK 都是在线的 二 KEEL 工具 是一款开源的数
  • php使用smtp发送邮件(ssl链接方式)

    在这里我要介绍的是如何使用smtp进行发送邮件 分别介绍了普通链接和ssl链接两种方式 一 准备材料 smtp类下载地址 https download csdn net download panjiapengfly 10688054 二 代
  • 甲骨文发布适用于 MongoDB 的 Oracle Database API;Chrome 和 Edge 互相“拉踩”;树莓派驱动程序现可在 Android 上运行

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 倪光南 可适当聚焦 RISC V
  • C++随机数之default_random_engine

    头文件 include
  • kafka中partition数量与消费者对应关系

    kafka是由Apache软件基金会开发的一个开源流处理平台 kafka是一种高吞吐量的分布式发布订阅消息系统 它可以处理消费者在网站中的所有动作流数据 kafka中partition类似数据库中的分表数据 可以起到水平扩展数据的目的 比如
  • Extjs IE内存问题

    1 使用了ExtJS 3 1并且更改了模块加载方式之后 我的OPOA内存回收有所改进 记录一下概要 1 不用autoload url url scripts true 的方式 而使用eval response responseText 方式
  • 家乐氏董事会批准将于10月2日分拆为两家公司

    美通社消息 家乐氏公司宣布 其董事会正式批准之前宣布的分拆为两家独立上市公司 Kellanova 和 WK Kellogg Co 的计划 2023 年 10 月 2 日完成分拆后 家乐氏公司将更名为 Kellanova Kellanova
  • java笔记:接口的特征和使用

    接口 1 接口的定义 修饰符 interface 接口名 extends 父接口1 父接口2 零个到多个常亮定义 零个到多个抽象方法定义 零个到多个内部类 接口 枚举定义 零个到多个默认方法或类方法定义 修饰符可以为public或者省略 d