Java小白的学习之路——day12

news2024/11/14 13:50:40

目录

一、final

什么是final?

二、接口概述

 什么是接口?

与抽象类的区别

常量接口

接口传参多态

四、内部类

什么是内部类?

成员内部类

静态内部类

局部内部类


一、final

 

什么是final?

final从字面意思来看时最终的,不可改变的含义,它可以修饰在类、方法以及变量中

值得注意的是:final修饰类则该类不能被继承,修饰方法则该方法不能被重写,修饰变量则该变量变为常量

代码示例

/*final*/ class Animal{//不能被继承
	public /*final*/ void eat() {//不能被重写
		
	}
	
}

class Dog extends Animal{
	public void eat() {
		
	}
}

public class Test1 {
	public static void main(String[] args) {
		
	}
}
class A{
	//final修饰的成员变量,没有初始化,需要赋值
	//a.直接赋值   b.动态代码块  c.构造方法
	final String name ;/*= "b";*/
	//final修饰的静态变量——静态常量(状态值——被判断)
	//a.直接赋值  b.静态代码块
	static final int age;/* = 66;*/
	/*{
		name = "b";
	}*/
	public A() {
		name = "b";
	}
	static {
		age=33;
	}
	String sex;
}

public class Test2 {
	public static void main(String[] args) {
		final int a = 5;
		//a=5;//final修饰的基本类型变量,值不可变
		final int[] arr=new int[] {1,2,3};
		arr[0] = 66;//final修饰的引用变量,值可变
		final A aa = new A();
		//aa = new A();//final修饰引用变量,地址不可变
		aa.sex = "男";//final修饰引用变量,属性值可变
	}
}

二、接口概述

 什么是接口?

接口是指特殊的抽象类,可以看成抽象的事务,它的方法也是抽象的,需要通过实现来类完成

与抽象类的区别

同:生成class文件,不能实例化对象,作为引用类型来使用,均可调用Object方法

异:属性都是公开的静态常量,方法都是公开的抽象方法,不能有构造方法,没有代码

interface MyInter{
	//public static final:公开的静态常量
	String name = " 占山";
	
	//public abstract:公开的抽象方法
	void teat();
	
	//public MyInter() {}没有构造方法
	
	//{}没有动态代码块
	//static {没有静态代码块
}
//实现类的处理:1.将自身变为抽象  2.重写接口的抽象方法
/*abstract */class MyImpl implements MyInter{

	@Override
	public void teat() {
		
		
	}
	
}

实际应用场景,在之后的案例中会更多的使用这些场景

interface fireable{//一般把接口后缀able具备某种能力
	String name = "吴彦祖";
	void fire() ;//能力的具体体现
}
interface ITest{//标记型接口——没有抽象方法的接口	
}
interface ITest2 extends ITest,fireable{//接口的多继承
	
}

class WaWa implements fireable{//实现多个接口
	@Override
	public void fire() {
		System.out.println(" 吴彦祖会演戏");
	}
	public void eat() {
		System.out.println("吴彦祖正在吃饭");
	}
}

public class Test3 {
	public static void main(String[] args) {
		//作为引用类型来使用——多态
		//调用:
		fireable fire = new WaWa();
		fire.fire();//可以调用实现类重写的方法
		//接口引用指向实现类对象
		//但不能调用类中独有方法,强转
		if(fire instanceof WaWa) {//强转成实现类对象——强转会有隐患
			WaWa wa = (WaWa) fire;
			wa.eat();
		}
	}
}

常量接口

//常量接口:接口中,定义了静态常量
interface Inter{
	int HTTP_OK=200;//静态·常量规范
	int HTTP_ERROR=404;
}

public class Test5 {
	public static void main(String[] args) {
		int state = getPageState();
		if(state==Inter.HTTP_OK) {	
			System.out.println("成功返回页面");
		}else if(state==Inter.HTTP_ERROR) {
			System.out.println("失败的页面状态");
		}
	}
	private static int getPageState(){//当成具体实现
		return Inter.HTTP_OK;
	}
}

接口传参多态

interface USB1{
	void run();
}

class Mouse1 implements USB1{
	public void run() {
		System.out.println("鼠标正在连接电脑");
	}
}

class Disk1 implements USB1{
	public void run() {
		System.out.println("硬盘正在连接电脑");
	}
}

class Computer1  {
	public void connect(USB1 usb1) {
		usb1.run();
	}
}

public class Test1_1 {
	public static void main(String[] args) {
		Computer1 com = new Computer1();
		com.connect(new Mouse1());
		com.connect(new Disk1());
	}
}

四、内部类

 

 

什么是内部类?

在一个类的内部又包含了完整的类,它可以生成独立的class文件,可使用外部类的私有成员且不破坏封装性,可以将外部类的一些功能交给内部类完成,有成员内部类、静态内部类以及局部内部类

成员内部类

class Outter{
	private String name="张三";
	public int add(int a,int b) {
		return new Inner().addFun(a, b);//注意这两行的写法
	}
	
	class Inner{//成员内部类
		private String name="李四";
		//private int addFun(int a,int b);不能使用static
		public int addFun(int a,int b) {
		
			System.out.println(name);//输出内容优先作用域小的;用域下
			//System.out.println(Outter.this.name);//张三
			return a+b;
		}
	}
}



public class Test1 {
	public static void main(String[] args) {
		Outter.Inner inner = new Outter().new Inner();
		System.out.println(inner.addFun(4, 5));
	}

静态内部类

只需要在内部类中加上static进行修饰

class A{
	private int age = 30;
	static class B{
		static String name;
		public void show() {
			
			//System.out.println(age);因为加载时机问题,在静态内部类中不能使用外部类属性
			System.out.println("静态内部类方法的调用");
		}
	}
}

public class Test2 {
	public static void main(String[] args) {
		A.B b=new A.B();//static的资源需要类来调
		b.show();
		//简化方式
		B b2 = new B();//这里要导包才不会出错
		b2.show();
	}

局部内部类

不用加public进行修饰

class AA{
	public void show() {
		int age =10;//在局部内部类中使用局部变量时会变为常量+final
		/*局部内部类不能加public修饰*/
		class BB{//定义的局部内部类
			//只在当前方法体调用
			public void test() {
				System.out.println(age);
				System.out.println("局部内部类");
			}
		}
		new BB().test();
	}
	
}

public class Test3 {
	public static void main(String[] args) {
		new AA().show();//调用方法
	}
}

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

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

相关文章

你真的了解JS垃圾回收机制吗?

目录 前言 堆栈内存管理 JS垃圾回收机制 标记清除(Mark and Sweep) 标记阶段 清除阶段 标记清除的特点 优点 缺点 引用计数(Reference Counting) 引用计数器的维护 引用计数的跟踪 垃圾回收的触发 回收对象 引用计…

视频转音频MP3格式怎么做?教你几种转换小妙招

当我们需要编辑视频中的声音,例如去除噪音、调整音量、加入配乐等,此时需要先将视频中的音频提取出来进行编辑,再将编辑后的音频重新与视频合并,以便达到一个最佳效果。那么怎么将视频转换成MP3格式的音频文件呢?教大家…

SpringBoot项目多模块打包部署Docker实战

前言 我们好多程序员都只关注功能代码的编写,在一些运维工作上则显得略有不足。这篇文章通过介绍最常见的Maven管理的Spring Boot项目多模块打包部署Docker来介绍一下项目部署过程中操作流程和几个需要注意的点。文章假设读者有前面提到的技术点的前置知识&#xf…

C#(五十八)之C#List

前几天&#xff0c;看同事写的代码中有list相关的字眼&#xff0c;百度了一下&#xff0c;原来是C#中list泛型集合。 了解一下。 List&#xff1a;泛型集合&#xff0c;List<T>类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList<T> 泛型…

Maven工程分模块开发讲解及入门案例

1.分模块开发的意义 一个模块只做自己对应的功能&#xff0c;提升开发效率&#xff0c;将一个工程拆分成若干个子模块方便之间相互调用&#xff0c;接口共享&#xff0c;降低耦合度提高代码复用率。 2.分模块开发入门案例 下面将domain这个模块从当前模块当中给拆分出来。 …

开心档之CSS 测验

目录 CSS 测验 CSS 测验 CSS测验是一种衡量前端开发人员对CSS的熟练程度的测试。通过CSS测验&#xff0c;可以评估一个人对CSS语言的掌握程度和应用能力&#xff0c;帮助公司或招聘方挑选合适的人才。下面将介绍如何进行CSS测验以及一些常见的CSS考题。 一、CSS测验的类型 1…

OpenCV 入门教程:寻找和绘制轮廓

OpenCV 入门教程&#xff1a;寻找和绘制轮廓 导语一、寻找轮廓二、绘制轮廓三、示例应用3.1 目标检测和定位3.2 图像分割 总结 导语 寻找和绘制轮廓是图像处理中常用的技术之一&#xff0c;用于识别、定位和分析图像中的目标区域。在 OpenCV 中&#xff0c;寻找和绘制轮廓可以…

「2024」预备研究生mem-行程问题

一、行程问题 二、课后题 往返 上山下山

LeetCode[75]颜色分类

难度:Medium 题目&#xff1a; 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库…

【前端面试专栏】用户输入网址到页面返回都发生了什么?

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步…

软件安全测试流程与方法分享(下)

安全测试是在IT软件产品的生命周期中&#xff0c;特别是产品开发基本完成到发布阶段&#xff0c;对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。安全是软件产品的一个重要特性&#xff0c;也是CNAS测试认证中非常重要的项目&#xff0c;本系列文章我们与大家…

linux 信号原理 信号处理设置signal, 信号发送kill,信号等待sigsuspend,信号阻塞sigprocmask,一网打尽信号使用

​专栏内容&#xff1a; postgresql内核源码分析 手写数据库toadb 并发编程 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 概述 信号是一种软中断的方式&#xff0c;让进程陷入中断处理调…

vector的resver和resize

#include <iostream> #include <vector> using namespace std; int main() {std::vector<std::vector<std::vector<int> > > a(2);//创建2个vector<vector<int> >类型的数组vector<int> vec;//vec.resize(10); //结果1vec.res…

【Linux之拿捏信号3】阻塞信号

文章目录 相关概念原理sigset_t信号集信号集操作函数sigprocmask系统调用sigpending 相关概念 实际执行信号的处理动作——信号递达Delivery&#xff08;例如自定义捕捉动作&#xff0c;core&#xff0c;Term终止进程的动作&#xff09;。信号从产生到递达之间的状态——信号未…

Verilog基础之十四、FIFO实现

目录 一、FIFO 1.1 定义 1.2 实现方式 1.3 实现原理 二、代码实现 三、仿真结果 3.1 复位阶段 3.2 写入阶段 3.3 读取阶段 3.4 同时读写或不读不写 四、参考资料 一、FIFO 1.1 定义 FIFO(First in First out)为先进先出队列&#xff0c;具有存储功能&#xff0c;…

一篇带你彻底搞懂线程池

目录 一、自定义线程池 1、产生背景 2、堵塞队列 3、线程池 4、拒绝策略 二、ThreadPoolExecuor 1、线程池状态 2、构造方法 3、newFixedThreadPool 4、newCachedThreadPool 5、newSingleThreadExecutor 6、提交任务 7、关闭线程池 三、异步模式之工作线程 1、定…

C-数据的储存(上)

文章目录 前言&#x1f31f;一、数据类型详细介绍&#x1f30f;1.内置类型&#x1f4ab;&#xff08;1&#xff09;.整形家族&#x1f4ab;&#xff08;2&#xff09;.浮点数家族&#x1f30f;2.构造类型&#xff08;也称自定义类型&#xff09;&#x1f30f;3.指针类型&#x…

OpenCV 入门教程:Haar特征分类器

OpenCV 入门教程&#xff1a; Haar 特征分类器 导语一、Haar特征分类器原理二、Haar特征分类器步骤三、示例应用总结 导语 Haar 特征分类器是图像处理中常用的目标检测算法&#xff0c;用于识别图像中的特定目标。该算法基于 Haar-like 特征模板&#xff0c;通过训练分类器来实…

ArcGIS PRO基础教程(一)

操作要求 1.面积为50-80亩 2.不能选在有耕地、园地内 3.坡度小于15度,高程在以下1930 4.距离水源地在300米以内 已知数据 1.等高线图 CONTOUR 2.土地利用图 parcel 3.水系图 water 操作步骤 创建工程,模板选地图就可以了(注:在arcgis pro中创建工程可以看作在arcg…

大火的ChatGPT与表格插件结合会有哪些意想不到的效果?

大火的ChatGPT与表格插件结合会有哪些意想不到的效果&#xff1f; 摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 ChatGPT已经火了好…