学点儿Java_Day8_接口、final、static

news2024/9/20 4:56:04

1 接口interface

1.1 概念

接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法)
接口就是一个规范(标准),他没有提供任何是实现,具体的功能由实现接口的子类去实现。
接口就是一个规范,可插拔(可以被替换,首先定义一个标准(接口),大家都遵守这个标准,就可以实现互相之间替换)
① 接口是一个纯粹的抽象类,接口里面的方法都是抽象方法:public abstract
② 接口里面所有的属性:(public static final) double PI = 3.14;

接口中的所有属性**是且总是(public static final)**,final见后面

1.2 接口理解、接口与抽象类(继承)

灯泡的接口 与 各种白炽灯钨丝灯之间的关系
计算机主板上CPU、内存插口 与 各种CPU和内存之间的关系
即接口(的具体实现)可插拔(对应不同型号的钨丝灯、各种CPU内存条),而接口不变

这里认为鸟类下蛋跟昆虫产卵属于不同的动作方法
如何选择接口还是抽象类
① 继承是严格的父子关系,你继承什么你就是什么:鸽子就是鸟。
  父类是抽取了所有子类的共同特征,父类里面的属性和方法是所有子类所共有的属性和方法。
② 接口是一个标准,一般用在能不能具有某个功能。
  把能不能飞定义称为一个接口IFly,实现了这个接口的类就具有了这个功能。

    //argument: 参数
    public static void main(String[] args) {
        GeZi geZi = new GeZi();
        geZi.egg();
        geZi.fly();
        geZi.gugujiao();

        //多态: 声明成父类类型,new子类对象
        AbstractBird bird = new GeZi();
        bird.egg();
        //bird是站在AbstractBird这个父类的角度去看new出来的DaYan
        //bird.fly();
        //cannot resolve method 'gugujiao' in 'AbstractBird'
        //bird.gugujiao();

        //站在能不能飞 IFLy的角度去看GeZi,只能看到fly()这个方法
        IFly fly = new GeZi();
        fly.fly();
        //Cannot resolve method 'egg' in 'IFly'
        //fly.egg();
        //fly.gugujiao();
        fly = new MiFeng();
        fly.fly();
    }

2 final

final总结:修饰变量、类、方法 final:最终的意思
① final变量:这个变量就不能被修改,就是常量 public static final double PI = 3.1415;
② final类:这个类就不能被继承
③ final方法:这个方法就不能被重写

3 static(静态属性、静态方法)

3.1 说明与理解

    非静态的属性和方法(实例属性和方法)必须通过new对象访问,而静态的属性和方法是属于类的,在类加载到内存中就可以访问,不需要new对象就可以使用,但是可以被所有对象所共享。
    小区里面业主的房子可以看成一个一个的对象,这些都是属于特定的业主所独有。但是小区里面也有一些公共设施(健身器材、绿地),这些公共设施是属于这个小区的。但是是可以被所有的业主对象所使用的。

3.2 注意点

    ① 静态的方法只能访问静态的方法和静态的属性(因为当前对象的实例可以没有创建,所以静态的方法是没办法调用非静态的方法和属性的)
    ② 静态的方法中不能写this、super关键字(因为当前的对象实例可能还没有创建,代表当前类对象的this还有代表父类对象的super可能都还没有创建)

3.3 例子

编程时我们会发现有时main方法中调用自身所在的类的其他方法时,发现无法调用,错误调用情况如下

public class Demo1{
	public static void main(String[] args){
		test();
	}
	
	public void test(){
	
	}
}

原因:main方法已经声明为静态,静态方法只能调用静态方法,无法调用非静态方法test()。非静态方法可以调用静态方法。
解决方案:
① 创建一个Demo1的实例,然后通过该实例调用方法test。

public class Demo1{
	public static void main(String[] args){
		Demo1 d1 = new Demo1();
		d1.test();
	}
	
	public void test(){
	
	}
}

② 将test方法声明为静态,就是在void前面添加static。

public class Demo1{
	public static void main(String[] args){
		test();
	}
	
	public static void test(){
		
	}
}

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

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

相关文章

3/21 work

自由发挥登录窗口的应用场景,实现一个登录窗口界面。(不要使用课堂上的图片和代码,自己发挥,有利于后面项目的完成) 要求: 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件相关设置,通…

深度学习项目-基于深度学习的股票价格预测研究

概要 随着经济的发展,中国股票市场的规模持续扩大,早已成为金融投资的重要部分,掌握股票市场的变化规律无论是对监管者还是投资者都具有极其重要的意义。正因如此,人们不断探索着股票市场的变化规律,其中使用深度学习预…

【C++】1416. 求长方形的周长和面积

问题:1416. 求长方形的周长和面积 类型: 基本运算、整数运算 题目描述: 从键盘读入2个整数,分别代表一个长方形的长和宽,请计算长方形的周长和面积; 输入: 从键盘读入2个整数,用…

【网站项目】291校园疫情防控系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

windows下使用压缩包安装mysql8.0数据库

获取安装包 可以访问mysql 官网下载压缩安装包 (官网地址:https://downloads.mysql.com/archives/community/) 根据自己的需要,下载对应mysql版本,我选择是是8.0.16版本 安装 解压之后,可以看到压缩包…

德勤:《亚太地区半导体行业展望》

2024年2月22日,德勤联合全球半导体联盟(GSA)对亚洲半导体产业链相关企业展开调研,邀请数位亚太地区主要半导体企业领导人,共同探讨半导体企业在当前环境下应如何通过数字技术曲线的领先优势保持业务竞争力和盈利能力&a…

GESP图形化编程二级认证真题 2024年3月

GESP 图形化二级试卷 (满分:100 分 考试时间:120 分钟) 一、单选题(共 10 题,每题 3 分,共 30 分) 1、小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿…

(day 15)JavaScript学习笔记(对象3)

概述 这是我的学习笔记,记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript,那么这一系列的学习笔记可能会对你有所帮助。 今天继续学习对象,主要是Object.create()、原型链、修改原型指…

Autosar的前世今生:E2E通信校验

在浏览项目整体框架的时候,发现E2E是一个不可绕开的点,而且处处可见Autosar框架的踪迹,因此开一个专栏,每天学习一点相关知识点 E2E(end to end)是Autosar规范里规定的一种用于保证数据传输正确的概念&…

超越 GPT-4V 和 Gemini Pro!HyperGAI 发布最新多模态大模型 HPT,已开源

随着AI从有限数据迈向真实世界,极速增长的数据规模不仅赋予了模型令人惊喜的能力,也给多模态模型提供了更多的可能性。OpenAI在发布GPT-4V时就已经明确表示: 将额外模态(如图像输入)融入大语言模型(LLMs&am…

CTK插件框架学习-源码下载编译(01)

1、编译环境 window11、vs17、Qt5.14.0、cmake3.27.4 2、下载链接 cmake:Index of /files/v3.20 qt:Index of / vs22以前的版本需要登录下载:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 vs22下载:下载 Visu…

力扣热门算法题 62. 不同路径,66. 加一,67. 二进制求和

62. 不同路径,66. 加一,67. 二进制求和,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.21 可通过leetcode所有测试用例。 目录 62. 不同路径 解题思路 完整代码 Python Java 66. 加一 解题思路 …

专业矢量绘图设计软件:Sketch for mac 中文激活版

Sketch for Mac 是一款专业的矢量图形设计工具,主要用于 UI/UX 设计、网页设计、图标设计等领域。它的界面简洁、易用,功能强大,可以帮助设计师快速创建高质量的设计作品。 人性化界面 Sketch的界面非常简洁。最顶端的工具箱包含了最重要的操…

【MySQL】3.1MySQL索引的介绍

目录 一、索引的概念 数据库索引 索引的作用 索引的副作用 索引创建的原则(应用场景) 适合建立索引 二、索引的分类和创建 1.普通索引 创建普通索引 1.1直接创建 1.2修改表结构的方式创建普通索引 1.3创建表时创建普通索引 2.唯一索引 2.1…

ISO 8601:日期和时间的国际标准

ISO 8601 介绍 ISO 8601,介绍一下 ISO 8601 是由国际标准化组织(International Organization for Standardization,ISO)发布的国际标准,其全称为《数据存储和交换形式信息交换日期和时间的表示方法》。 这一标准提供了…

C语言 自定义类型:联合和枚举

目录 前言 一、联合体 1.1 联合体的特点 1.2 联合体与结构体的区别 1.3 联合体的大小计算 1.4 联合体例子 1.5 联合体判断大小端 二、枚举 2.1 枚举类型定义 2.2 枚举类型的优点 2.3 枚举类型的使用 总结 前言 之前我们讲了C语言其中一个自定义类型结构体&#xff…

jsp2024.3.21(4) html基础

一、实验目的 1、html 文件的基本结构&#xff1b; 2、html 的常用标记&#xff1b; <HTML> <HEAD> …… </HEAD> <BODY> …… </BODY> </HTML> 二、实验项目内容&#xff08;实验题目&#xff09; HTML常用标记 1&#xff0e;<…

说说你对webpack的理解?解决了什么问题?

文章目录 一、背景二、问题三、是什么参考文献 一、背景 Webpack 最初的目标是实现前端项目的模块化&#xff0c;旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候&#xff0c;我们会通过文件划分的形式实现模块化&#xff0c;也就是将每个功能及其相关状态数据各…

idea2023 运行多 springboot 实例

概要 1、修改idea运行多实例&#xff08;本地测试负载&#xff09; 你可能用到其他 1、改造项目缓存token 至redis 支持负载均衡部署 SpringSecurity6.0RedisJWTMP基于token认证功能开发&#xff08;源码级剖析可用于实际生产项目&#xff09;_springsecurity redis管理token…

【Django开发】前后端分离美多商城项目第3篇:用户部分,1. 后端接口设计:【附代码文档】

美多商城项目4.0文档完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;美多商城&#xff0c;项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业。项目准备&#xff0c;配置1. 修改settings/dev.py 文件中的路径信息,2. INS…