当前位置: 首页 > news >正文

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 抽象类存在的意义

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

http://www.jsqmd.com/news/336309/

相关文章:

  • 智慧校园科普气象站 校园教学气象站
  • <span class=“js_title_inner“>HagiCode 实践:如何利用 GitHub Actions 实现 Docusaurus 自动部署</span>
  • 基于springBoot的社区动物管理系统的设计与实现
  • 『n8n』初识界面
  • 2026年行业内做得好的仓库货架批发厂家推荐榜单,穿梭式货架/重型货架/金属货架/悬臂式货架,仓库货架企业有哪些 - 品牌推荐师
  • 基于SpringBoot的摄影服务平台设计开发实现
  • 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(9)-Wireshark的常用的low(基础)操作-上篇 - 北京
  • 2026年行业内诚信的升降机厂商电话,液压升降平台/防爆升降机/装车平台/升降机/自行走升降机,升降机销售厂家哪家好 - 品牌推荐师
  • 基于SpringBoot的勤工俭学管理系统设计与实现
  • 2026武汉护肤门店优质推荐榜云兮颜领衔 - 资讯焦点
  • 探讨湖北地区芝麻酱认证厂家,个性化定制怎么收费 - 工业品牌热点
  • AI专著写作新玩法:特色工具介绍,助你轻松应对复杂专著创作
  • <span class=“js_title_inner“>Python:类对象</span>
  • AI写论文宝藏合集!4款AI论文生成神器,高效完成学术写作!
  • 分析广东建材板材开割源头厂家,世翔金属价格多少 - 工业品网
  • AI专著写作新趋势:优质工具盘点,为你的学术创作加速
  • 学术专著撰写新途径!AI专著生成工具,开启创作新时代
  • 2026年可移动/车载/撬装/污泥脱水卧螺离心机厂家权威推荐:适配多场景固液分离的全系解决方案 - 品牌推荐官
  • AI写论文的秘密武器!4款AI论文写作工具,助力学术论文创作!
  • 文登潮汐表查询2026-02-04
  • AI写论文诀窍,4款AI论文生成工具助力,快速产出高质量论文!
  • 盘点全国北极绒生产厂,口碑靠谱且交货周期合理的有哪些 - 工业设备
  • 2026年好用的割圈绒生产厂推荐,供应稳定品牌有哪些 - 工业品牌热点
  • 生成引擎优化(GEO)在提升数字营销效果中的重要角色
  • 2026年中国旅行茶具市场分析,口碑好的旅行茶具品牌 - myqiye
  • 分析靠谱的建筑资质代办公司,天津广运达优势尽显 - myqiye
  • 基于大数据爬虫+Hadoop的电影数据分析系统开题报告
  • 2026年上海口碑好的当幸烘焙机构排名,值得合作的企业有哪些 - mypinpai
  • Buildroot系统镜像编译
  • 2026男士氨基酸洁面8款实测!哪款好用?专利控油屏障修护,这款闭眼入不踩雷 - 资讯焦点