news 2026/4/16 9:09:04

JAVA 多态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JAVA 多态

第一章 多态

1.1 多态的形式

多态是继封装、继承之后,面向对象的第三大特性。

多态是出现在继承或者实现关系中的

多态体现的格式

父类类型 变量名 = new 子类/实现类构造器;
变量名.方法名();

多态的前提:有继承关系,子类对象是可以赋值给父类类型的变量。例如Animal是一个动物类型,而Cat是一个猫类型。Cat继承了Animal,Cat对象也是Animal类型,自然可以赋值给父类类型的变量。

1.2 多态的使用场景

  • 当一个方法的形参是一个类,我们可以传递这个类所有的子类对象

  • 当一个方法的形参是一个接口,我们可以传递这个接口所有的实现类对象(后面会学)。

  • 而且多态还可以根据传递的不同对象调用不同类中的方法

代码示例:

1.3 多态的定义和前提

多态: 是指同一行为,具有多个不同表现形式。

从上面案例可以看出,Cat和Dog都是动物,都是吃这一行为,但是出现的效果(表现形式)是不一样的。

前提【重点】

  1. 有继承或者实现关系

  2. 方法的重写【意义体现:不重写,无意义】

  3. 父类引用指向子类对象【格式体现】

    父类类型:指子类对象继承的父类类型,或者实现的父接口类型。

1.4 多态的运行特点

调用成员变量时:编译看左边,运行看左边
调用成员方法时:编译看左边,运行看右边

代码示例:

Fu f = new Zi();
//编译看左边的父类中有没有name这个属性,没有就报错
//在实际运行的时候,把父类name属性的值打印出来
System.out.println(f.name);
//编译看左边的父类中有没有show这个方法,没有就报错
//在实际运行的时候,运行的是子类中的show方法
f.show();

1.5 多态的弊端

不能调用子类拥有,而父类没有的方法。

我们已经知道多态编译阶段是看左边父类类型的,如果子类有些独有的功能,此时多态的写法就无法访问子类独有功能了

解决办法:

1.6.3 向下转型(强制转换)

  • 向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。

使用格式:

子类类型 变量名 = (子类类型) 父类变量名;
如:

Aniaml a = new Cat();
Cat c =(Cat) a;

1.6.4 案例演示

1.6.6 instanceof关键字

变量名 instanceof 数据类型
如果变量属于该数据类型或者其子类类型,返回true。
如果变量不属于该数据类型或者其子类类型,返回false。

第二章 包

2.1 包

​ 包在操作系统中其实就是一个文件夹。包是用来分门别类的管理技术,不同的技术类放在不同的包下,方便管理和维护。

包名的命名规范

路径名.路径名.xxx.xxx // 例如:com.itheima.oa
  • 包名一般是公司域名的倒写。例如:黑马是www.itheima.com,包名就可以定义成com.itheima.技术名称。

  • 包名必须用”.“连接。

  • 包名的每个路径名必须是一个合法的标识符,而且不能是Java的关键字。

2.2 导包

什么时候需要导包?

​ 情况一:在使用Java中提供的非核心包中的类时

​ 情况二:使用自己写的其他包中的类时

什么时候不需要导包?

​ 情况一:在使用Java核心包(java.lang)中的类时

​ 情况二:在使用自己写的同一个包中的类时

总结:

除了Java核心包(java.lang),在使用除了当前包的类的时候,都要导包,当然也包括Java写的其他非核心包

3.2 不同权限的访问能力

可见,public具有最大权限。private则是最小权限。

编写代码时,如果没有特殊的考虑,建议这样使用权限:

  • 成员变量使用private,隐藏细节。

  • 构造方法使用public,方便创建对象。

  • 成员方法使用public,方便调用方法。

小贴士:不加权限修饰符,就是默认权限

第四章 final关键字

4.1 概述

Java提供了final关键字,表示修饰的内容不可变。

  • final不可改变,最终的含义。可以用于修饰类、方法和变量。

    • 类:被修饰的类,不能被继承。

    • 方法:被修饰的方法,不能被重写。

    • 变量:被修饰的变量,有且仅能被赋值一次。

4.2 使用方式

4.2.1 修饰类

final修饰的类,不能被继承。

格式如下:

final class 类名 { }

代码:

final class Fu { } // class Zi extends Fu {} // 报错,不能继承final的类

查询API发现像public final class Stringpublic final class Mathpublic final class Scanner等,很多我们学习过的类,都是被final修饰的,目的就是供我们使用,而不让我们所以改变其内容。

4.2.2 修饰方法

final修饰的方法,不能被重写。格式如下:

修饰符 final 返回值类型 方法名(参数列表){ //方法体 }

代码:

4.2.3 修饰变量-局部变量

  1. 局部变量——基本类型基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改。代码如下:

public class FinalDemo1 { public static void main(String[] args) { // 声明变量,使用final修饰final int a;// 第一次赋值 a = 10; // 第二次赋值 a = 20; // 报错,不可重新赋值 ​ // 声明变量,直接赋值,使用final修饰 final int b = 10; // 第二次赋值 b = 20; // 报错,不可重新赋值 } }

第五章 抽象类

5.1 概述

5.1.1 抽象类引入

​ 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话说,父类可能知道子类应该有哪个功能,但是功能具体怎么实现父类是不清楚的(由子类自己决定),父类只需要提供一个没有方法体的定义即可,具体实现交给子类自己去实现。我们把没有方法体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类

  • 抽象方法: 没有方法体的方法。

  • 抽象类:包含抽象方法的类。

5.2 abstract使用格式

abstract是抽象的意思,用于修饰方法方法和类,修饰的方法是抽象方法,修饰的类是抽象类。

5.2.1 抽象方法

使用abstract关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。

定义格式:

修饰符 abstract 返回值类型 方法名 (参数列表);

代码举例:

public abstract void run();

5.2.2 抽象类

如果一个类包含抽象方法,那么该类必须是抽象类。注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。

定义格式:

abstract class 类名字 {

}

代码举例:

public abstract class Animal { public abstract void run(); }

1.2.3 抽象类的使用

要求:继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。

代码举例:

1.4 抽象类的细节

不需要背,只要当idea报错之后,知道如何修改即可。

关于抽象类的使用,以下为语法上要注意的细节,虽然条目较多,但若理解了抽象的本质,无需死记硬背。

  1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

    理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

  2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

    理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。

  3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

    理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。

  4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。

    理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。

  5. 抽象类存在的意义是为了被子类继承。

    理解:抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。

1.5 抽象类存在的意义

​ 抽象类存在的意义是为了被子类继承,否则抽象类将毫无意义。抽象类可以强制让子类一定要按照规定的格式进行重写

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 22:42:12

一遍搞定全流程!全网爆红的AI论文平台 —— 千笔写作工具

你是否曾为论文选题而发愁?是否在深夜里对着空白文档无从下笔?是否反复修改却仍不满意?论文写作的每一步都充满挑战,尤其是对于自考学生来说,时间紧张、资料繁杂、格式要求严格,让许多人苦不堪言。但如今&a…

作者头像 李华
网站建设 2026/4/13 8:45:20

<span class=“js_title_inner“>2026 奇点智能技术大会上海站官宣!解码AI Agent、世界模型与氛围编程等新范式</span>

“未来将没有前端、没有后端、没有全栈,只有 AI Agent 工程师。”身处一线开发的你,或许已经感受到了这股变化。在 AI 写代码、做决策、重构组织的当下,我们越来越清醒的意识到:这不仅是职位的更名,更是工业革命级的范…

作者头像 李华
网站建设 2026/3/20 9:23:02

文登潮汐表查询2026-02-04

位置:文登,日期:2026-02-04,农历:乙巳[蛇]年十二(腊)月十七,星期:星期三,潮汐类型:大潮活汛最高水位:380.00cm,最低水位:20.00cm&…

作者头像 李华
网站建设 2026/4/14 19:56:32

基于springBoot的社区动物管理系统的设计与实现

背景分析随着城市化进程加速,社区宠物数量显著增长,流浪动物管理问题日益突出。传统人工登记方式效率低下,信息孤岛现象严重,导致动物疫苗接种、绝育等公共卫生服务难以精准覆盖。2021年《动物防疫法》修订实施后,明确…

作者头像 李华
网站建设 2026/4/10 21:26:38

超越基础:用 Pydantic V2 与 FastAPI 构建坚不可摧的请求验证体系

好的,收到您的需求。以下是一篇关于 FastAPI 请求验证的技术文章,结合 Pydantic V2 的新特性,以一个有深度的“酒店预订系统”案例贯穿全文,力求内容新颖、结构清晰。超越基础:用 Pydantic V2 与 FastAPI 构建坚不可摧…

作者头像 李华