Java学习路线(10)——多态与内部类

news/2024/12/23 9:03:11/

一、多态

概念: 同类型对象执行同一个行为,表现出不同行为特性。

常见形式:

父类类型 对象名称 = new 子类构造器;
接口 对象名称 = new 实现类构造器;

多态中的成员访问特点

  • 方法调用: 编译看父类,运行看右边。(多态强调行为)
  • 变量调用: 编译看父类,运行看右边。(变量并没有冲突)

多态的要求

  • 有继承或实现的关系
  • 有父类引用指向子类对象
  • 子类重写方法

作用:

  • 在多态形势下,子类对象可以实现解耦合便于扩展和维护。(可以更换子类进行维护)
  • 定义方法时可以使用父类型作为参数,该方法可以接受兄弟类对象,体现多态的扩展性与便利性。(模拟泛型传参)

缺点: 多态特性只能使用同类通用方法。

克服缺点方法: 强制类型转换。

类型转换的注意事项

  • 当转型前的类型和对象真实类型不是同一种类型,会发出类型转换异常ClassCastException。(泰国男孩:???)
  • 在转型前建议使用instanceof关键字判断类型,再进行强转。(先做个亲子鉴定,再转属性嗷)
    instanceof使用方法:【变量名 instanceof 类型】(返回布尔值)

二、内部类

概念: 定义在一个类里面的类。

编写格式:

public class 外部类{public class 内部类{....}
}

使用场景与作用

  • 一个事物内部有一个部分需要完整结构进行描述,而内部结构又只为外部事物提供服务时使用。(类似于人体与器官的关系)
  • 内部类可以访问外部类的成员,包括私有成员。
  • 内部类提供更好的封装性,内部类本身也可以用修饰符。

内部类分类

  • 静态内部类
    概念: 使用static修饰的内部类,属于外部类。
    特点: 与普通类相同,只是位置在内部,可以访问外部类静态成员,但不可以直接访问实例成员(必须通过实例化外部类才能访问)。
    格式:
public class 外部类{public static class 静态内部类{}
}
  • 成员内部类(JDK16及以上可以定义静态成员)
    概念: 无static修饰的内部类,属于外部类。
    特点: 必须通过外部类才能创建内部类,可以访问外部类静态成员,也可以访问实例成员。(先加载外部类,再加载内部类)
    格式:
public class 外部类{public class 成员内部类{}
}public class Main{public static void Main(String[] args){外部类名.内部类名 名字 = new 外部类构造器().new 内部类构造器();}
}

问:成员内部类如何访问到外部类的成员变量?
答:使用【外部类名.this.变量名】,【外部类名.this】可以访问内部类所在内部类的对象,因为外部类已经包含了内部类,this获取的是当前对象关键字,那么我们就可以通过外部类的当前对象获取。

  • 局部内部类
    概念:设置在方法、代码块、构造器等执行体中的类。
    特点: 转以后的类文件名为外部类$N内部类.class
    格式:
public class Test{public static void main(String[] args){class Temp{......}}
}

使用场景: 临时数据对象

  • 匿名内部类

概念: 定义在方法、代码块中没有名字的局部内部类。
作用: 方便创建子类对象。
使用方式: 可以作为方法的实际参数进行传输。(new 出来就是个匿名对象)
格式:

new|抽象类名|接口名(){重写方法;
}

使用场景

	public static void main(String[] args) {StudentExtend student = new StudentExtend();student.setContent("私有部分1");student.write();StudentExtend student2 = new StudentExtend(){@Overridepublic String writePrivate() {return super.writePrivate();}};student2.write();}

http://www.ppmy.cn/news/78473.html

相关文章

面试问题汇总

最近面试了几家公司,对问到的问题汇总一下。 Unity 是左手坐标系还是右手坐标系? 这个题靠记忆答的答错了,是左手坐标系。 大拇指指的方向是X轴,食指指的方向是Y轴方向,中指指的方向Z轴方向。 场景中游戏物体Activity为false,G…

flask restful项目开发结尾必看!!!

为了实现restful风格的一些增删查改需要安装的第三方库太繁杂了所以: 建议放弃flask框架 这个框架自带的功能太少了,实现一些简单的功能都要自主安装很多第三方库,而且不同版本的第三方库还有兼容问题 啧啧啧! 后续也不在更新限流和鉴权认证了(除非很闲没事做) 最近更新这几篇…

在Kaggle上使用Stable Diffusion进行AI绘图

前言 因为使用Stable Diffusion进行AI绘图需要GPU,这让其应用得到了限制本文介绍如何在Kaggle中部署Stable Diffusion,并使用免费的P100 GPU进行推理(每周可免费使用30小时),部署好后可以在任意移动端使用。本项目在s…

CANoe使用教程

目录 1.CAN IG使用 2.Visual Sequence 自动发送报文序列,可以设置多个visual sequence,可用于重复的网络模拟和write窗口输出,比IG灵活,比CAPL简单 3.CANoe中的系统变量和环境变量都是一种用于存储和传递数据的变量,…

网络安全证书合集

网络安全作为2022年十大高新紧缺技能之一,足以证明网络安全的重要性,作为网络安全工程师更是责任重大,证书作为能力证明的一方面,也是尤为重要,本文将着重盘点一下网络安全证书合集。 国家注册渗透测试工程师&#xf…

项目风险应对策略:项目经理应对不确定性的指南

风险应对是项目经理管理项目未来的工具箱。它可以帮助管理人员弄清楚可能会出现什么问题,并让他们有机会为这些问题做好准备。 对抗负面风险的5种策略 如果没有风险管理计划,项目可能会因意外问题或不良风险而迅速脱轨。什么策略可以用来对抗负面风险&…

【老王读SpringMVC-6】Controller method 的正常返回值处理

handler method 的返回值处理包含两个方面: 一是:返回值对象的处理; 二是:视图的渲染。 返回值对象的处理 通过前面的分析,我们知道, 被 RequestMapping 标记 handler method 的执行是通过调用 RequestMa…

Pytest模式执行python脚本不生成allure测试报告

1.安装allure 下载allure的zip安装包将allure.zip解压到python的lib目录中将allure的bin路径添加到环境变量path中(注意:配置环境变量后,一定要重启电脑。因为环境变量没生效,我搞了半天在pycharm不能生成报告,在cmd中可以生成报…