Java多态详解(入门可看)

article/2025/9/12 22:52:57

一、概念
所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式。多态 机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:请添加图片描述
多态性是对象多种表现形式的体现。
现实中,比如我们按下F1键这个动作:

  • 如果当前在Flash界面下弹出的就是AS 3的帮助文档;
  • 如果当前在Word下弹出的就是Word帮助;
  • 在Windows下弹出的就是Windows帮助和支持。
  • 同一个事件发生在不同的对象上会产生不同的结果。

向上转型和向下转型:
Power(电源) ——父类
ACPower(交流电+适配器) ——子类
Battery(电池) ——子类
Power p=new ACPower();//向上转型,将一个匿名子类对象赋值给其父类对象。
对象类型转换及instanceof运算符:
Java允许有继承关系的对象进行类型之间的转换。
(1)向上转型:从子类转换为父类类型:自动
Person p=new Student();
(2)向下转型:从父类转换为子类类型:强制显示转换
Person p=new Student();//声明一个父类对象p,并使之成为一个子类的实例
//Person p=new Person ();//这样声明父类对象,向下转型时将导致异常
Student s=( Student)p; //强制向下转型
(2.1)instanceof运算符
instanceof运算符用于测试一个对象是否为某类或其子类的一个实例。
格式:Boolean 变量=对象名 instanceof 类名
结论:实例字段、静态字段、静态方法在编译期间就实行了静态绑定,而实例方法则实行的是动态绑定。
1.创建对象的结构:
类名 对象名
2.分配内存
对象名 = new 类名( );
二、多态分类

  1. 多态性,是面向对象中最重要的概念,在java中有两种体现: 同一个方法在不同的条件下表现出不同的功能。
    方法的重载(overload)和重写(overwrite)。
    (1)、静态多态——重载
    静态多态也称之为编译时多态,在编译的时候决定调用哪个方法。
    (2)、动态多态——重写
    动态多态:运行时多态,由运行时决定使用哪个方法。
    在Java中有两种形式可以实现多态:继承和接口。
  2. 继承和接口
    (1). 基于继承实现的多态
    基于继承的实现机制主要表现在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。
    基于继承实现的多态可以总结如下:对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。
    如果父类是抽象类,那么子类必须要实现父类中所有的抽象方法,这样该父类所有的子类一定存在统一的对外接口,但其内部的具体实现可以各异。这样我们就可以使用顶层类提供的统一接口来处理该层次的方法。

(2).基于接口实现的多态
继承是通过重写父类的同一方法的几个不同子类来体现的,那么就可能是通过实现接口并覆盖接口中同一方法的几不同的类体现的。
在接口的多态中,指向接口的引用必须是指定实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。
继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承多实现,它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务接口。所以它相对于继承来说有更好的灵活性。

三、多态的存在条件
1、有继承
2、要有重写
3、父类的引用指向子类的对象:自动向上转型

四、多态中的访问特点
1.成员变量的调用
编译的时候看左边 运行的时候也看左边
2.指向子类的父类引用只能访问父类中拥有的方法和属性
3.若子类重写了父类中的某些方法,在调用这些方法的时候,必定是使用子 类中定义的方法
4.对于子类中存在而父类不存在的方法,该引用是不能使用的
结论:实例字段、静态字段、静态方法在编译期间就实行了静态绑定,而实例方法则实行的是动态绑定。
五、多态评价
1.好处和作用:
多态的存在提高了程序的扩展性和后期可维护性。

2.弊端:
父类调用的时候只能调用父类中的方法,不能调用子类的特有方法,因为父类并不清楚将来会有什么样的子类继承。
六.多态练习

package zhou;
public class Father {static int a=66;//静态字段int b=99;//实例字段public void c() {//实例方法System.out.println("c=96");}public static void d(){//实例方法System.out.println("d=100");}
}package zhou;
public class Son extends Father{static int a=88;//静态字段int b=69;//实例字段int e=51;//实例字段public void c() {//实例方法System.out.println("c=56");}public static void d(){//实例方法System.out.println("d=60");}public void f() {//实例方法System.out.println("f=89");}
}package zhou;
public class Test1 {public static void main(String[] args) {Father f=new Son();//向上转型System.out.println("a="+f.a+"  b="+f.b);f.c();//动态绑定f.d();//静态绑定Son s=new Son();s.f();//直接调用son里面的f,也可以输出输出son里面的实例字段e;}
}

请添加图片描述


http://chatgpt.dhexx.cn/article/aGvJMAZn.shtml

相关文章

Java多态类

Java多态类 一、多态概述二、多态性形势下的类型转换问题三.多态类综合案例 一、多态概述 1、什么是多态? 同类型的对象,执行同一个任务,会表现出不同的行为特征。 2、多态的常见形式 父类类型 对象名称 new 子类构造器 接口 对象名称 ne…

java多态的理解

目录 一、多态的定义:二:多态的好处:三、实现多态的三个条件(前提条件,向上转型、向下转型):四、多态使用:虚拟方法调用深入分析多态: 向下转型instanceof关键字的使用经…

解析java多态经典习题

解析java多态经典习题 1 题目一 1.1 题目内容 编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从 而发出不同的声音。 可以弹奏的乐器包括二胡、钢琴和琵琶。 实现思路及关键代码: ①定义乐器类Instrument,包括方法makeSound() ②定义乐器类的子类…

java多态(java多态的概念)

简述什么是JAVA中的多态 父类的引用可以引用子类的对象。换句话说,如果有一个类继承或实现了某个类或接口,那么被继承或实现的类或接口可以创建那一个类的对象,这样程序就会变得很灵活。 java中多态的定义是什么? 多态性是指允许不…

彻底搞懂Java多态

很多初学者在自学Java时候都卡在了Java多态,本教程从实际案例出发阐述Java多态现象及Java多态的原理。 通过案例理解多态的现象 需求描述 多态是类在继承关系下的一种形态,下边先通过一个需求展示下多态的现象。 攀博课堂是一个在线教育学习平台&…

java多态实现原理

众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。C 和 Java 作为当前最为流行的两种面向对象编程语言,其内部对于多态的支持到底是如何实现的呢&#xff0…

新手小白学JAVA 面向对象之多态

多态 1. 概念 多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。 可以把不同的子类对象都当作父…

html表单实例:用户反馈表单页面代码

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>demo</title> </head> <body><h1 align"center">用户反馈表单</h1><form method"post"><…

html 下拉多选框代码,js实现下拉复选框效果(代码实例)

本章给大家带来用js实现下拉复选框效果(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 先看看效果: 下面我们看看代码: HTML代码: HTMLCSSJavaScriptjQueryPHPMySQLJavaC#C++Pyhtoncss代码:div {display: inline-block; } select {min-width…

HTML实例--制作表单

运用表格和表单基础知识简单制作一个表单 表单制作使用表格来对表单进行排版美化 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">…

Html5 Canvas绘图实例

前些年的时候&#xff0c;突然对Canvas感兴趣&#xff0c;利用空闲时间做一些Canvas小例子进行练习&#xff0c;仅供学习分享使用。如有不足之处&#xff0c;还请指正。 什么是 Canvas&#xff1f; HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。画布是一个矩形区域…

用html做个随机点名系统代码,html座位表随机点名的实例代码

这篇文章详解html座位表随机点名的实例代码点名 td { width: 9.09%; height: 50px; text-align: center; } .tdBg { background-color: pink; } var timer null; // 这是一个函数&#xff0c;表示一个功能 function start(){ timer setInterval(function(){ // alert("要…

在html中如何写日期的代码,日期html代码

日期 时间 星期的html代码是什么代码 创建静态方法findDate,返回List类型。 声明一个List list集合,向List集合存储英文星期。 调用findDate静态方法,并打印List集合存储结果。 CSS布局HTML小编今天和大家分享一个显示当前系统日期的HTML代码 显示的格式为“某年某月某日”,…

html向上移动图片代码,图片随网页上下移动的代码实例

我们以腾讯QQ网页在线客服为例,大家将代码拷到DW中,用心体会。图片随网页上下移动的代码实例 function picsize(obj,MaxWidth){img=new Image(); img.src="/obj.src"; if (img.width>MaxWidth) {return MaxWidth; } else {return img.width; } } function Close…

html5 简单实例源代码

实例教程&#xff1a;http://www.w3school.com.cn/jquery/ 源代码下载&#xff1a; http://download.csdn.net/detail/wyx100/9827067 html5文件布局结构 html5文件布局结构html5语言标记 浏览器执行效果 html5文件源代码 源代码下载&#xff1a; http://download.csdn.net/de…

html实例,实现表单

1.使用HTML完成下列功能 <!doctype html> <html><head><!-- <meta charset"GBK">--></head><body><table width"60%" border"3" align"center" bgcolor"#F0F8FF" borderColor…

html导航栏纵向代码,html横向导航栏怎么做?横向导航条代码实例

有不少小伙伴在刚学习 html 的时候都会遇到这样一个问题&#xff1a;html 横向导航栏怎么做&#xff1f;今天W3Cschool小编就为大家分享一下简单的横向导航条代码&#xff0c;相信会对大家有所帮助。 html 横向导航栏一般用两种方法来制作&#xff1a;第一种&#xff0c;我们使…

html如何插入下拉菜單,html下拉菜单怎么做?html下拉菜单的代码实例介绍

本篇文章主要的介绍了关于HTML select标签下拉菜单的做法实例&#xff0c;还有一个html的一些网站的下拉菜单的用法都放在了文章中&#xff0c;下面就让我们一起来看看这篇文章吧 首先我们要知道html下拉菜单的代码是什么&#xff1f; 很明显是select元素可创建单选或多选菜单。…

HTML代码示例和介绍

HTML基本的格式 <!DOCTYPE html> <!-- 声明文档。定义html --> <html lang"en"> <!-- 元素是页面的根元素 --> <head> <!-- 元素包含文档的元数据 --><meta charset"UTF-8"&g…

STM32仿真器下载程序出现SWD/JTAG Communication Failure的解决方法

一、解决办法&#xff1a;将STM32开发板断电&#xff0c;将板子上的BOOT0用短路帽接入3.3V高电平&#xff0c;重新插入仿真器&#xff0c;下载程序到开发板。不出意外可见程序烧录成功&#xff0c;此时将BOOT0接回低电平&#xff0c;后续烧录程序便不会出现SWD/JTAG Communicat…