Java面向对象-接口

news2024/12/23 18:24:39

在这里插入图片描述


Java面向对象-接口

  • 一、JDK1.8之前
  • 二、接口的作用
  • 三、JDK1.8之后,新增非抽象方法
  • 四、静态方法

一、JDK1.8之前

1、类是类,接口是接口,它们是同一层次的概念
2、接口中没有构造器
3、接口如何声明:interface
4、在jdk1.8之前,接口只有两部分内容
a、常量 public static final
b、抽象方法 pubilc abstract
注意:修饰符可以省略不写,ide会帮助你自动补全
5、类和接口的关系是什么? 实现关系,类实现接口
6、一旦实现一个接口,那么实现类要重写接口中全部的重写方法
7、如果没有全部重写抽象方法,那么这个类变成一个抽象类
8、java只有单继承,java还有多实现
一个类继承其他类,只能直接继承一个父类
但是实现类实现接口的话,可以实现多个接口
9、写法:先继承 再实现 class Student extends Person implements TestInterface01, TestInterface02
10、接口不能创建对象

package com.msb_interface;

/*
1、类是类,接口是接口,它们是同一层次的概念
2、接口中没有构造器
3、接口如何声明:interface
4、在jdk1.8之前,接口只有两部分内容
    a、常量  public static final
    b、抽象方法 pubilc abstract
    注意:修饰符可以省略不写,ide会帮助你自动补全
 */
public interface TestInterface01 {
    //常量
    /*public static final*/ int NUM = 10;

    //抽象方法
    /*public abstract*/ void a();

    /*public abstract*/ void b(int num);

    /*public abstract*/ int c(String name);
}

interface TestInterface02 {
    void e();

    void f();
}

/*5、类和接口的关系是什么? 实现关系,类实现接口
6、一旦实现一个接口,那么实现类要重写接口中全部的重写方法
7、如果没有全部重写抽象方法,那么这个类变成一个抽象类
8、java只有单继承,java还有多实现
一个类继承其他类,只能直接继承一个父类
但是实现类实现接口的话,可以实现多个接口
9、写法:先继承 再实现 class Student extends Person implements TestInterface01, TestInterface02

 */
class Student extends Person implements TestInterface01, TestInterface02 {
    @Override
    public void a() {
        System.out.println("a.....");
    }

    @Override
    public void b(int num) {
        System.out.println("b.....");
    }

    @Override
    public int c(String name) {
        return 0;
    }

    @Override
    public void e() {
        System.out.println("e.....");
    }

    @Override
    public void f() {
        System.out.println("f.....");
    }
}

class Test{
    public static void main(String[] args) {
        //10、接口不能创建对象
        TestInterface01 t =new Student();  //接口指向实现类——》多态

        //11、接口中的常量如何访问
        System.out.println(TestInterface01.NUM);
        System.out.println(Student.NUM);

        Student s = new Student();
        System.out.println(s.NUM);

        TestInterface01 t1 = new Student();
        System.out.println(t1.NUM);

    }
}

二、接口的作用

定义规则:只是跟抽象类不同地方在哪?它是接口不是类
接口定义好规则之后,实现类负责实现即可

继承:子类对父类的继承
实现:实现类对接口的实现

继承:收集 extends 照相机 “is-a”的关系,手机是一个照相机。
上面的写法不好。
实现:收集 implements 拍照功能 “has-a”的关系,手机具备照相的能力。

案例:飞机、小鸟、风筝

多态的应用场合:
1、父类当作方法的形参,传入具体的子类的对象
2、父类当作方法的返回值,返回的是具体的子类的对象
3、接口当作方法的形参,传入具体的实现类的对象
4、接口当作方法的返回值,返回的是具体的实现类的对象

三、JDK1.8之后,新增非抽象方法

被public default修饰的非抽象方法:
注意1:default修饰符必须要加上,否则出错。
注意2:实现类中要是想重写接口中的非抽象方法,那么default修饰符必须不能加,否则出错。

package com.msb_interface1;

public interface TestInterface {
    //常量
    public static final int num =10;
    //抽象方法
    public abstract void a();
    //public default修饰的非抽象方法
    public default void b(){
        System.out.println("--TestInterface---b()----");
    }
}

class Test implements TestInterface{
    @Override
    public void a() {
        System.out.println("重写了a方法");
    }

    @Override
    public void b() {
        TestInterface.super.b();
    }

    public void c(){
        //用接口中的b方法
        b();  //可以
//        super.b();  不可以
        TestInterface.super.b(); //可以
    }
}

四、静态方法

static不可以省略不写
静态方法不能重写

package com.msb_interface1;

public interface TestInterface2 {
    // 常量
    public static final int NUM = 10;

    // 抽象方法
    public abstract void a();

    //public default非抽象方法、
    public default void b() {
        System.out.println("----b----");
    }

    //静态方法
    public static void c() {
        System.out.println("---c--");
    }
}


class Demo implements TestInterface2{
    @Override
    public void a() {
        System.out.println("重写了a方法");
    }

    public static void c() {
        System.out.println("---Demo中的c方法--");
    }
}

class A{
    public static void main(String[] args) {
        Demo d = new Demo();
        d.c();
        Demo.c();
        TestInterface2.c();
    }
}
---Demo中的c方法--
---Demo中的c方法--
---c--

为什么要在接口中加入非抽象方法?
如果接口中只能定义抽象方法,那么我要是修改接口中的内容,那么对实现类的影响太大了,所有实现类都会受到影响。
现在在接口中加入非抽象方法,对实现类没有影响,想调用去调用即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1829197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

植物大战僵尸杂交版最新pvzHE_v2.1.0含游戏窗口放大工具

植物大战僵尸杂交版是由B站”潜艇伟伟迷”UP主制作的一款同人策略塔防游戏,也叫pvzHE,该游戏由《植物大战僵尸》原版魔改而来,引入了创新的杂交合成系统,让玩家可以将不同植物进行杂交,创造出具有全新能力和外观的植物…

浪潮信息内存故障预警技术再升级 服务器稳定性再获提升

浪潮信息近日对其内存故障智能预警修复技术进行了全面升级,再次取得技术突破。此次升级后,公司服务器的宕机率实现了80%锐降,再次彰显了浪潮信息在服务器技术领域的卓越能力。 浪潮信息全新升级服务器内存故障智能预警修复技术MUPR (Memory …

复星杏脉算法面经2024年5月16日面试

复星杏脉算法面经2024年5月 面试记录:3个部分1. 自己介绍 2. 问八股 3.代码题先自我介绍20分钟问问题1. 梯度爆炸怎么解决,三个解决方案:梯度裁剪(Gradient Clipping)正则化(Regularization)调整…

《全网首发》平衡三进制图灵机的构建

PS:以下内容均为本人原创,未经授权及许可,严禁引图、转载或加工,违者必究。 ————2024年6月13号 1、图灵机的概述 图灵机(Turing machine)是一种理论计算模型,由英国数学家阿兰图灵(Alan T…

Vue44-创建vue脚手架

一、Vue脚手架的版本说明 vue cli:command line interface 命令行接口工具 用最新的脚手架,这样可以兼容vue3荷vue2版本。 二、通过vue脚手架创建项目 注意: 执行npm run serve 启动项目的时候,要进入到创建的vue项目里面&…

Python(二)---数据类型与变量、以及运算符

文章目录 前言1.Python程序的构成1.1.代码的组织和缩进1.2.使用\行连接符 2.对象和引用、标识符规则2.1.对象2.2.引用2.3.标识符规则 3.变量和简单赋值语句3.1.变量的声明和赋值3.2.删除变量和垃圾回收机制3.3.常量3.4.链式赋值3.5.系列解包赋值 4.最基本内置数据类型4.1.数字和…

代理IP协议有何区别?深入了解 SOCKS5、HTTP 代理

在数字通信领域,数据安全和匿名性都是非常重要的指标。互联网的不断发展催生了几种协议,每种协议都有独特的优势和挑战。其中,SOCKS5 代理、HTTP代理最为广泛使用,下面给大家一起讨论,HTTP代理与 SOCKS5代理&#xff0…

Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…

北航第六次数据结构与程序设计作业(查找与排序)选填题

一、 顺序查找的平均查找长度ASL(1 2 …… n)/ n (n 1)/ 2 二、 这半查找法的平均查找次数和判定树的深度有关系。若查找一个不存在的元素,说明进行了深度次比较。 注意,判定树不是满二叉树,因此深…

生信分析进阶5 - 全外显子组变异检测和ANNOVAR注释Snakemake分析流程

基于yaml或ini配置文件,配置文件包含例如样本名称、参考基因组版本、exon capture bed文件路径、参考基因组路径和ANNOVAR注释文件等信息。 基于该流程可以实现全外显测序的fastq文件输入到得到最终变异VCF文件。 1. Snakemake分析流程基础软件安装 # conda安装 …

Vue3【二十一】Vue 路由模式(createWebHashHistory /createWebHistory )和RouterLink写法

Vue3【二十一】Vue 路由模式(createWebHashHistory /createWebHistory )和RouterLink写法 Vue3【二十一】Vue 路由模式和普通组件目录结构 createWebHistory history模式:url不带#号,需要后端做url适配 适合销售项目 利于seo crea…

pytorch学习笔记6

想要找一些官方的小工具数据集,可以进入pytorch官网,DOCS-》pytorch下拉至libraries,点击torchversion,调整版本至0.9.0就可以找到相应的一些数据集,训练集 ctrlp可以看一个函数中需要设置哪些参数 下载数据集可以参考…

C/C++中内存开辟与柔性数组

C/C中内存的开辟 在C中,我们都知道有三个区: 1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结 束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指…

云和运维(SRE)的半生缘-深读实证02

这个标题不算太夸张,云计算和很多IT岗位都有缘,但是和运维(SRE)岗位的缘分最深。 “深读实证”系列文章都会结合一些外部事件,点明分析《云计算行业进阶指南》书中的内容。本次分享介绍了下列内容: 我以运维…

Git学习记录v1.0

1、常用操作 git clonegit configgit branchgitt checkoutgit statusgit addgit commitgit pushgit pullgit loggit tag 1.1 git clone 从git服务器拉取代码 git clone https://gitee.com/xxx/studyJava.git1.2 git config 配置开发者用户名和邮箱 git config user.name …

数值分析笔记(二)函数插值

函数插值 已知函数 f ( x ) f(x) f(x)在区间[a,b]上n1个互异节点 { x i } i 0 n \{{x_i}\}_{i0}^{n} {xi​}i0n​处的函数值 { y i } i 0 n \{{y_i}\}_{i0}^{n} {yi​}i0n​,若函数集合 Φ \Phi Φ中函数 ϕ ( x ) \phi(x) ϕ(x)满足条件 ϕ ( x i ) y i ( i …

决策树概念

图例 概念 决策树基本上就是对经验的总结 决策树的构成,分为两个阶段。构造和剪枝 构造 概念 构造就是生成一颗完整的决策树。构造的过程就是选择什么属性作为节点的过程 构造过程,会存在3种节点 根节点:就是树的最顶端,最…

基于STM32和人工智能的自动驾驶小车系统

目录 引言环境准备自动驾驶小车系统基础代码实现:实现自动驾驶小车系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景:自动驾驶应用与优化问题解决方案与优化收尾与总结 1. 引言 随着人工智能和嵌入式系统技术的…

竟然与 package-lock.json 更新有关!部分用户 H5 页面白屏问题!

一.问题 1 场景 现象 接到部分用户反馈进入xxx H5 页面空白; 研发测日志里问题用户的线上页面URL地址可以正常访问,没有复现问题!!! 定位问题 监控平台和客户端日志报错: SyntaxError: Unexpected toke…

pc repair

pc repair 修理电脑,换配件