Java基础笔记:Day_10 接口、匿名内部类

Java基础:接口多态的综合案例 —— 笔记本电脑 笔者已经把面试题和答案整理成了面试专题文档[外链图片转存中…(img-BpU5kMgw-1714131319854)][外链图片转存中…(img-0SLoTxnu-1714131319855)][外链图片转存中…(img-XkgrbSvO-1714131319855)][外链图片转存中…(img-S3oRfUdh-1714131319856)]本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录。 阅读详情

一、接口
定义类语法: [修饰符] class [类名] {}
定义接口语法:[修饰符] interface [接口名] {} 在这里我们还没有考虑接口的父接口!
接口命名问题:习惯以able结尾以表示某种功能,如:Walkable
或者以handler结尾
或者以I开头,如:IWalkable.java
和类一样,编译后依然会和类一样拥有字节码文件。

接口中存在的成员:
1.接口中没有构造器。接口不能创建对象,不能new
2.接口中定义的字段/成员变量,实质是全局静态常量(public static final)
常量接口:有人喜欢使用接口来封装多个常量信息,我们称之为常量接口,但我们不推荐这么做
标志接口:接口中无任何内容,仅仅是一个接口定义。仅仅用来标志其他的类来实现这个接口。(如:Serializable接口)不推荐
3.接口中定义的方法实质上是用public abstract
一般的,我们在接口很中定义的方法不喜欢用public
4.接口中定义的内部类都是公共的静态内部类。如:public static interface ABC{}
5.不能再接口中定义构造器以及普通方法。

接口的特点以及继承关系:

特点: 1.无构造器,也不能显示定义构造器,不能实例化
2.接口只能继承接口,不能继承类,且接口支持多继承(类是单继承)
[修饰符] interface [接口名] extends [接口1],[接口2]
3.接口里的方法全是抽象的,默认修饰符是public abstract
4.接口里的字段全都是全局静态常量,修饰符是public static final
5.接口中的内部类全是公共静态的,修饰符的public static
类和接口直接只有实现关系,没有继承关系,使用implements表示
接口和接口之间只能是继承关系,使用extends表示。
接口的实现者:实现类
接口只是仅仅定义了某一类事物应当具有某些功能,但是没有提供任何实现
此时,我们得提供类,再让该类去实现接口,并覆盖接口中的方法,从而实现类接口中定义的功能

[修饰符] class [类名] extens [父类] implements [接口1],[接口2]{}
//类实现接口的语法,可见一个类可以实现多个接口
接口和实现类之间的关系严格上来说是实现关系,使用implements表示
但是在开发中,有时候为了方便也把这个关系称之为特殊的继承关系
可以这么理解:接口是实现类的父类。实现类是接口的子类
接口 变量 = 创建实现类对象//体现了多态的思想
接口和实现类的多态关系,才是以后见到的最多的。
并非接口中没有普通方法,从java8之后,接口中可以定义默认方法,有方法体。

接口和抽象类的区别:
相同点:
1.都位于继承的顶端,用于被实现或者被继承
2.都不能被实例化
3.都可以定义抽象方法,其子类/实现类都必须覆写这些抽象方法

不同点:
1.接口中无构造器,抽象类有构造器
2.抽象类可以包含普通方法和抽象方法,接口只能包含抽象方法(java8之前)
3.一个类只能继承一个直接父类(),接口类是多继承的并且多继承的并且支持一个类实现多个接口
4.变量:接口默认是public static final ,抽象类是默认包访问权限
5.方法:接口里默认是public abstract,抽象类是默认包访问权限
6.内部类:接口里默认是public static,抽象类是默认包访问权限
如果接口和实现类可以完成相同的功能,尽量使用接口,面向接口编程

接口和抽象类集合使用:适配器模式

面向接口编程的范例:

interface IWalkable
{
	void walk();//实质是抽象方法
}

interface ISwimable
{
	void swim();
}

interface Amphibiousable extends IWalkable,ISwimable	//多继承
{	
}

class Animal
{
}

class Cat extends Animal implements IWalkable
{
	public void walk()//提供方法体,否则也必须作为抽象类
		{
			System.out.println("走路!");
		}	//因为接口中方法是抽象的,公共的,所以实现类必须覆盖接口的方法,且必须用public修饰,子类方法修饰符必须大于等于父类修饰符
}

class Fish extends Animal implements ISwimable
{
	public void swim()//提供方法体,否则也必须作为抽象类
	{
		System.out.println("游泳!");
	}
}

class Frog extends Animal implements IWalkable,ISwimable	//也可直接继承上面的Amphibiousable
{	//类实现多接口
	public void walk()//提供方法体,否则也必须作为抽象类
	{
		System.out.println("跳跃");
	}
	public void swim()//提供方法体,否则也必须作为抽象类
	{
		System.out.println("青蛙游泳!");
	}
}



class InterfaceDemo
{
	public static void main(String[] args)
	{
		//new IWalkable(); 这句话是不能使用的,接口不能new
		Cat c = new Cat();//不推荐   推荐 ↓↓↓
		c.walk();

		IWalkable w = new Cat();//推荐,面向接口编程
		w.walk();//体现多态特征,执行Cat中的walk

		ISwimable f = new Fish();
		f.swim();

		Frog frog = new Frog();	//特殊情况 不多
		frog.walk();
		frog.swim();
	}
}

在这里插入图片描述

interface IUSB
{
	void swapData();
}

class Mouse implements IUSB
{
	public void swapData()
	{
		System.out.println("鼠标运行");
	}
}

class Printer implements IUSB
{
	public void swapData()
	{
		System.out.println("打印机运行");
	}
}

class MotherBoard 
{
	private static IUSB[] usbs = new IUSB[6];
	private static int index = 0;//插入位置
	
	public static void Insert(IUSB usb)
	{
		if(index == usbs.length)
		{
			System.out.println("插槽已满!");
			return ;
		}
		usbs[index] = usb;
		index++;
	}
	//取出主板中每一个USB设备
	public static void doWork()
	{
		for(IUSB usb : usbs)
		{
			if(usb != null)
				usb.swapData();
		}
	}
}

class USBDemo 
{
	public static void main(String[] args) 
	{
		//创建对象
		MotherBoard.Insert(new Mouse());
		MotherBoard.Insert(new Printer());
		MotherBoard.Insert(new Printer());
		MotherBoard.Insert(new Printer());

		MotherBoard.doWork();
	}
}

二、内部类

内部类可以使用public/缺省/protected/private修饰
外部类访问修饰符要么使用public或者缺省,但不能用static

四种内部类:
实例内部类:内部类无static
静态内部类:内部类有static
局部内部类:在方法中定义了内部类
匿名内部类:仅用此一次使用的类,属于局部内部类的特殊情况。

实例内部类: 没有static修饰内部类,说明内部属于外部类的对象,不属于外部类本身
特点:
1.创建实例内部类之前,必须存在外部类对象,必须通过外部类对象创建内部类对象
2.实例内部类的实例自动持有外部类的实例引用,内部类可以直接访问外部类成员
3.外部类中不能直接访问内部类成员,必须通过内部类的实例去访问
4.实例内部中不能定义静态成员,只能定义实例成员
5.如果实例内部类和外部类存在同名字段或者方法abc,那么在内部类中:
this.abc表示访问内部类成员
外部类.this.abc表示访问外部类成员

静态内部类:使用static修饰的内部类
特点:
1.静态内部类的实例不会自动持有外部类的特定实例引用,
在创建内部类的实例时,不必创建外部的实例
2.在静态内部类可以直接访问外部类的静态成员,如果访问外类的实例成员必须通过外部类的实例去访问
3.在静态内部类中可以定义静态成员和实例成员
4.测试类可以通过完整的类名直接访问静态内部类的静态成员
局部内部类:(开发中不要使用)
在方法中定义的内部类,其可见范围是当前方法和局部变量
特点:
1.不能使用public/private/protected/static修饰符
2.局部内部类中能在当前方法中使用
3.局部内部类和实例内部类一样,不能包含静态成员
4.局部内部类和实例内部类,可以访问外部类所有成员
5.局部内部类访问的局部变量必须使用final修饰(Java8中不是,自动隐式加final但依然是常量不能改变其值)
原因:如果当前方法不是main方法,那么当前方法调用完毕后,当前方法栈帧被销毁,方法内部的局部变量的空间全部销毁
然后局部内部类是定义在方法中,而且在方法中会创建局部内部类对象,而局部内部类会去访问局部变量,
当当前方法被销毁的时候,对象还在堆内存,依然持有对局部变量的引用。
但是方法被销毁的时候,局部变量就被销毁
此时:在堆内存中,一个对象引用了一个不存在的数据为了避免该问题,
我们使用final修饰局部变量,从而变成常量,永驻内存空间,即使方法被销毁后,
该局部变量也在内存中,对象可以继续持有。
匿名内部类:是一个没有名称的局部内部类。在开发中经常有这样的类,只需要定义一次,使用一次就可以丢弃。在JavaSE/Android是事件处理中:不同的按钮点击之后,应该有不同的响应操作。此时首选使用内部类。

特点:
1.匿名内部类本身无构造器,但是会调用父类构造器
2.匿名类尽管没有构造器,但是在匿名类中提供一段实例化代码块,JVM在调用父类构造器后,会执行该段代码
3.内部类处理可以继承类之外,还可以实现接口

	//格式:

			new 父类构造器(实参列表) 或者接口()
			{
				//匿名
			}
超详细Tokenizer——文本训练数据预处理 Tokenizer是Keras库中的一个文本处理工具,它用于将文本分词并构建词汇表,同时将文本映射到整数序列。这对于自然语言处理任务非常有用,例如文本分类、情感分析、机器翻译等。 阅读详情

相关推荐

VSCode CMake 安装与配置详解

概述 在windows上使用cmake编译C/C++程序时,首先需要CMake,安装gcc/g++编译环境,然后使用VSCode 以及配置下CMakelist.txt。 所需工具: VSCode (需要安装以下插件) C/C++ C++ Intellisense CMake CMake tools CMake Tools Helper CMake MinGW 安装CMake 下载链接:...

Markus 8万+

handler、provider、factory、manager等在Java中命名含义

在Java编程中,handler, provider, factory, manager这些词常常被用作类名或者接口名,它们各自具有一定的命名含义。这些命名并没有硬性的规定,它们的使用取决于开发者的习惯和项目的约定。

a20124597的博客 2423

企业级AI Agent平台建设方案

本报告将深入剖析构成一个顶级AI Agent平台的各个功能层面,为构建者提供一份全面的战略蓝图。

分享AI和大数据领域的知识和研究 1582

Java面向对象学习笔记(五)

二、面对对象---5. (一)接口 176、什么是接口和为什么需要接口 177、接口的定义和接口成员 多个抽象类的抽象就是接口。Java中最小的程序单元就是类,接口其实就是一个特殊的类。Java中的接口表示规范,用于定义一组方法,表示某一类事务必须要具备的功能,要求实现类必须来实现该接口并提供方法实现。 定义类语法: [public] class 类名{} 定义接口语法:[public] interface 接口名{},在这里还没有考虑接口的父接口等等 接口起名问题:表示具有某些能力,

u010171051的博客 339

从零开始,手把手教你用RTL代码设计一个简单的8位CPU(附状态图与ALU设计)

本文详细介绍了如何从零开始设计一个简单的8位CPU,包括状态机设计、ALU实现与RTL编码实战。通过具体的指令集分析、状态图设计和Verilog代码示例,帮助读者深入理解CPU工作原理,并掌握RTL代码编写技巧。特别适合计算机系统学习者和硬件设计爱好者。

weixin_30847063的博客 320

从仿真到实物:Realsense D435+ROS2焊接机械臂的视觉标定与数据验证指南

本文详细介绍了如何将Realsense D435相机与ROS2焊接机械臂从仿真环境迁移到实物部署的全过程。通过视觉标定、数据验证和焊接场景优化,确保系统在真实环境中精准可靠。重点讲解了硬件配置、驱动优化、数据一致性验证及焊接应用的特殊处理,为工业自动化开发者提供实用指南。

weixin_28701593的博客 407

【Java】内部类(实例,静态,局部,匿名)

一. 内部类定义 内部类: 所谓内部类就是在一个类内部进行其他类结构的嵌套操作。 因此,在一个类中除了可以定义字段,方法以外,还可以定义类 1.1 为什么要使用内部类: (1)增强封装,把内部类隐藏在外部类之内,不许其他类访问内部类。 (2)内部类能提高代码的可读性和可维护性,把小型类嵌入到外部类中结构上代码更靠近。 (3)内部类可以直接访问外部类的成员。 二. 四种内部类 根据使用不同的修饰符或者定位位置的不同,可以将内部类分为四种: (1)实例内部类:内部类没有static修饰; (2)静态内部类:内部

pangpd的博客 249

数据分析——员工离职预测

员工离职预测一. 题目描述二. 数据说明三. 步骤实现1.导入并查看2.数据探索性分析3.数据处理4.模型分析5.结果分析(1) 可视化的结果分析(2)特征选择结果分析(3)多模型交叉验证结果分析 一. 题目描述 员工是否准备离职是困扰用人单位的问题,其关系到单位业务的开展及新人员的招聘,及时的分析出有离职倾向的员工成为关键的因素。数据主要包括影响员工离职的各种因素(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等)以及员工是否已经离职的对应记录。 二. 数据说明 数据分为训练数据

weixin_43925467的博客 1万+

java java面向对象-匿名内部类分析

20180410 java java面向对象-匿名内部类分析匿名内部类的定义:就是没有名称的局部内部类,适用于只使用一次的类。在开发中经常有这样的类,只需要定义一次,使用一次,就可以丢弃了。此时就不应该把这种类定义在文件中。再javaSE的事件中 或在安卓的事件处理中 这种类用的较多。eg:不同的按钮 点击之后会有不同的响应操作,事件响应的代码 就不需要放在文件中定义。这样 就首选 匿名内部类。匿...

weixin_39089680的博客 279

CesiumForUnreal实现鹰眼地图(MiniMap)效果

CesiumForUnreal实现鹰眼地图(MiniMap)效果

专注GIS开发 3951

SentEval学习笔记

SentEval allows you to evaluate your sentence embeddings as features for the followingdownstreamtasks: Task Type #train #test needs_train set_classifier MR movie review(影评) 11k 11k 1 1 CR product review(产品评述) ...

AlphaFinance 803

二、实现接口和抽象类的匿名内部类

1、接口 public class InterfaceDemo { public static void main(String[] args) { // student p=new student(); // System.out.println(p.getname()); // 这是接口的匿名内部类的写法,在内部把方法实现,就不用再去制造一个类来实例化接口 System.o...

m0_37081536的博客 323

【图像去噪】论文精读:FM2S: Self-Supervised Fluorescence Microscopy Denoising With Single Noisy Image

论文题目:FM2S: Self-Supervised Fluorescence Microscopy Denoising With Single Noisy Image —— FM2S:单噪声图像自监督荧光显微镜去噪arXiv 2024!显微图像去噪!通过可视化详细的细胞结构和生物过程,荧光显微镜具有显着先进的生物学研究。然而,由于难以精确建模固有噪声和获取干净图像进行训练,这种图像去噪任务往往面临挑战,这限制了大多数现有方法。在本文中,我们提出了一种有效的。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 408

Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解。

Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解。 什么是匿名内部类? 顾名思义 匿名 就是没有名字,一个没有名字的内部类,称为匿名内部类。 下面先看一个例子,比如说你想和你的女朋友去看春节档的《唐人街探案三》 这个时候我们要先定义一个接口,去看唐探3的接口 public interface MyInterface { // 看电影的抽象方法 void watchFilm(); } OK!现在我们有了一个接口,接口里面有一个看电影的抽象方法。而现在你要去看电

weixin_46066689的博客 3880

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Java基础】DAY10

DAY10DAY101、接口概述与生活举例2、接口的定义基本格式3、接口的抽象方法定义4、接口的抽象方法使用5、接口的默认方法定义6、接口的默认方法使用7、接口的静态方法定义8、接口的静态方法使用9、接口的私有方法定义10、接口的私有方法使用同样接口中的静态方法也是如此11、接口的常量定义和使用12、接口的内容小结13、继承父类并实现多个接口1、接口是没有静态代码块或者构造方法的。2、一个类的直接...

Memory的博客 418

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

基础JAVA学习-day08(代码块-匿名内部类)

内部类是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。当一个类的内部,包含一些完整的事物,且这些事物没有必要单独设计时,就可以把这些事物设计成内部类。比如:汽车的内部有发动机、底盘、车架...,发动机、底盘、车架是包含在汽车内部的一个个完整事物,可以把发动机、底盘、车架设计成内部类。// 发动机内部类// 成员变量,成员方法// 底盘内部类// 成员变量,成员方法// 车架内部类// 成员变量,成员方法成员内部类的定义格式。

qq_61066711的博客 2223

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Day10-2.接口、匿名内部类

1 接口 概念: 生活中的角度:接口就表示一类规则,想要使用这个接口就需要遵守接口中定义的规则 Java语言的角度:接口就是用来定义抽象方法的一个特殊类型 特点: (1)定义一个接口,使用一个新的关键字:interface 类名 (2)接口和抽象方法的关系: 接口中只能定义抽象方法,不能定义非抽象方法 (3)接口不能实例化(不能创建对象) (4)类和接口之间不是继承关系,而是实现关系:implements 类型实现一个接口之后,接口中定义的内容,类型也可以继承 (5)接口的实现类有两条分支:  

Aaphasia的博客 255

java基础进阶学习笔记Day03(黑马磊哥课程)

通配符和上下限E,T,K,V是定义泛型时用;?是使用泛型时用car = lx;//报错car = tsl;//报错//不报错//不报错虽然LX和TSL是Car的子类,但是ArrayList,ArrayList和ArrayList不存在父子类关系和的在使用上有什么区别。

wangwangxiaohai的博客 1380

【Java基础】DAY11

DAY11DAY111、final关键字1、可以用来修饰一个类2、可以用来修饰一个方法3、可以用来修饰一个局部变量4、可以用来修饰一个成员变量2、四种权限修饰符同一个类同一个包不同包子类不同包非子类3、内部类的概念与分类4、成员内部类的定义5、成员内部类的使用1、间接方式:2、直接方式:6、内部类的同名变量访问7、局部内部类定义8、局部内部类的final问题9、匿名内部类的定义格式与注意事项10、...

Memory的博客 565

# Day09-Java基础

Day09-Java 文章目录Day09-Java1、匿名内部类2、Object类简介2.1 取得对象信息toString()2.2 对象的比较equals()2.3 Object接口引用数据类型3、包装类3.1 装箱与拆箱3.2 字符串与基本数据类型的转换3.3 包的定义3.4 包的导入4、访问控制权限5、jar命令 1、匿名内部类 内部类:在一个类的内部定义了另外的类,称为内部类,匿名内部类指的是没有名字的内部类。为了清楚内部类的主要作用,下面首先观察一个代码。 interface IMessage{

Java厂长 5038

Java(匿名内部类)

如果接口的实现类(或者是父类的子类)只需要使用唯一的一次, 那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。 匿名内部类的定义格式: 接口名称 对象名 = new 接口名称() { // 覆盖重写所有抽象方法 }; 对格式“new 接口名称() {...}”进行解析: 1. new代表创建对象的动作 2. 接口名称就是匿名内部类需要实现哪个接口 3. {...}这才是...

Valentino112358的博客 2006

JAVA之匿名内部类

如果接口的实现类(或者是父类的子类)只需要使用唯一的一次 那么就可以省略子类的定义,改用使用【匿名内部类】 定义格式: 接口名称 对象名 = new 接口名称() { //覆盖重写所有抽象方法 }; 对格式进行解析: new 接口名称() {…} 1、new代表创建对象的动作 2、接口名称就是匿名内部类需要实现的哪个接口名称 3、{…}这才这才是内部类的内容 注意: 1、试用场景:匿名内部类在创建的时候只能使用一次; 如果需要使用,且内容一样的话,必须使用实现类 2、匿名对象在【调用方法】的时候,只能调用唯

qq_44796093的博客 695

小白学java日记day10:接口与匿名内部类

接口: 接口中可以定义: 1、属性 接口中的属性,默认都是静态常量,访问权限都是public。 2、方法 接口中的方法,默认都是抽象方法, 接口和抽象类的异同 1、相同点 (1)都可以编译成字节码文件。 (2)都不能创建对象。 (3)都可以声明引用。 (4)都具备Object类中所定义的方法。 (5)都可以写抽象方法。 2、不同点 (1)接口中所有的属性,都是公开静态常量,缺省使用 public static fifinal 修饰。 (2)接口中所有的方

qq_42515611的博客 266

JAVA基础 day10

JAVA基础 day10 文章目录**JAVA基础 day10****包****作用****使用****导包****tips:****内部类****普通内部类****静态内部类****tips:****局部内部类****数组****声明及初始化****增强for()****匿名内部类** 包 作用 文件夹,不同的包存储不同的.java文件,提高可读性,后期维护性,区分同名类 使用 pac...

weixin_41615926的博客 176

java 接口、匿名内部类练习

一、题目描述 利用接口做参数,写个计算器,能完成加减乘除运算。 (1)定义一个接口Compute含有一个方法int computer(int n, int m)。 (2)设计四个类分别实现此接口,完成加、减、乘、除运算。 (3)设计一个类UseCompute,类中含有方法:public void useCom(Compute com, int one, int two),此方法能够用传递过来的对象调用computer方法完成运算,并输出运算的结果。 (4)设计一个主类Test,调用UseCompute中的方

一只小菜鸡 1718

基础第一阶段day11——final、匿名内部类习题

第一题 判断下面代码的输出结果 public class Animal { public final int a=10; public Animal() { a=20; } public Animal(int a) { this.a=a; } } public class Test { public sta...

qq_43775310的博客 537
上一篇: Java基础笔记:Day_09 单例、final、抽象方法和抽象类
下一篇: Java基础笔记:Day_11 Eclipse的使用
Panda不姓潘
博客等级 码龄8年 152粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值