多态(继承)

封装继承多态 多态意味着“多种形态”,同一个接口或引用可以指向不同类型的对象,使用父类型的对象作为参数,可以接收所有子类对象(这里父类引用具有多种形态)。在运行时根据实际对象类型调用相应的方法。多态分为两种形式,方法重载是编译时多态的例子(静态绑定),而方法重写则是运行时多态的体现(动态绑定)--方法重载是一个类的多态性表现而方法重写是子类与父类的一种多态性表现向上转型实际就是创建一个子类对象,将其当成父类对象来使用。从小范围向大范围的转换语法格式:父类类型 对象名= new子类类型()使用出现的场景。 阅读详情

多态

同一操作作用于不同的对象上面,可以产生不同的对象上面,可以产生不同的解释和不同的执行结果。换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。

让你叫,你就叫

var makeSound = function(animal){
		if(animal instanceof Duck){
				console.log('嘎嘎嘎');
		}else if(animal instanceof Chicken){
				console.log('咯咯咯');
		}
};
var Duck = function(){};
var Chicken = function(){};
makeSound(new Duck());
makeSound(new Chicken());

真正意义的多态

// 不变部分隔离出来,所有动物都会发出叫声
	var makeSound = function(animal){
			animal.sound();
	};
//封装可变部分--对象的多态性
	var Duck = function(){};
	Duck.prototype.sound = function(){
		console.log('嘎嘎嘎');
	};
	var Chicken = function(){};
	Chicken.prototype.sound = function(){
		console.log('咯咯咯');
	};
	makeSound(new Duck());
	makeSound(new Children());
//此时增加一只狗
var Dog = function(){};
Dog.prototype.sound = function(){
	console.log('汪汪汪');
};
makeSound(new Dog());

JavaScript在编译时没有类型检查的过程,既没有检查创建对象类型, 又没有检查传递的参数类型。

Java多态实现

	public class Duck {
		public void makeSound(){
			System.out.println('嘎嘎嘎');
		}
	}
	public class Chicken {
		public void makeSound(){
			System.out.println('咯咯咯');
		}
	}
	public class AnimalSound {
		public void makeSound(Duck duck){
			duck.makeSound();			
		}
	}
	public class Test {
		public static void main(String args[]){
			 AnimalSound animalSound = new AnimalSound();
			 Duck duck = new Duck();
			 animalSound.makeSound(duck);
		}
	}

我们已经顺利地让鸭子可以发出叫声,如果让鸡也叫,可能受AnimalSound类的makeSound方法只接受Duck类型参数的影响然后报错

	public class Test {
		public static void main(String args[]){
			AnimalSound animalSound = new AnimalSound();
			Chicken chicken = new Chicken();
			animalSound.makeSound(chicken); //报错,只能接受Duck类型的参数
		}
	}

为解决这问题,静态类型的面向对象语言通常被设计为可以向上转型:当给一个类变量赋值时,这个变量的类型既可以使用这个类本身,也可以使用这个类的超类。
可以让Duck对象和Chicken对象的类型都被隐藏在超类型Animal ,这通常是对象表现多态型的必经之路。

使用继承得到多态效果

继承通常包括实现继承和接口继承
先创建一个Animal抽象类,再分别让Duck和Chicken都继承自Animal抽象类。

	public abstract class Animal {
		abstract void makeSound();  // 抽象方法
	}
	public class Chicken extends Animal {
		public void makeSound(){
			System.out.println('咯咯咯');
		}
	}
	public class Duck extends Animal {
		public void makeSound(){
			System.out.println('嘎嘎嘎');
		}
	}
	Animal duck = new Duck();
	Animal chicken = new Chicken();

让AnimalSound类的makeSound方法接收Animal类型的参数

	public class AnimalSound{
		public void makeSound(Animal animal){
			animal.makeSound();
		}
	}
	public class Test {
		public static void main(String args[]){
			AnimalSound animalSound = new AnimalSound();
			Animal duck  = new Duck();
			Animal chicken = new Chicken();
			animalSound.makeSound(duck);
			animalSound.makeSound(chicken);
		}
	}

地图案例

	var googleMap = {
		show: function(){
			console.log('开始渲染谷歌地图');
		}
	};
	var renderMap = function(){
		googleMap.show();
	};
	renderMap();
	//-----------------------------------------
	// google->baidu
	var googleMap = function(){
		show:function(){
			console.log('开始渲染谷歌地图');
		}
	};
	var baiduMap = function(){
		show: function(){
			console.log('开始渲染百度地图');
		}
	};
	var renderMap = function(type) {
		if(type == 'google'){
			googleMap.show();
		} else if(type === 'baidu') {
			baiduMap.show();
		}
	};
	renderMap('google');
	renderMap('baidu');
	//--------------------------------------
	var renderMap = function(map){
		if(map.show instanceof Function){
			map.show();
		}
	};
	renderMap(googleMap);
	renderMap(baiduMap);
//增加搜搜
	var sooMap = {
		show: function(){
			console.log('开始渲染搜搜地图');
		}
	};
	renderMap(sosoMap);
基于4G cat.1的低功耗车牌识别摄像头模组介绍 在消费类摄像头领域,4G低功耗相机已经非常普遍,在可视门锁,婴儿看护,户外监控等领域都获得了很好的应用.但是在工业领域,低功耗相机的应用还不是那么广泛.这里要介绍一款基于4G cat.1的低功耗车牌识别摄像头模组,在待机状态只有MCU和毫米波雷达以1Hz的频率工作,功耗低至500uA,并可以通过4G模块远程唤醒模组. 阅读详情

相关推荐

cadence——MOS晶体管I-V特性曲线仿真

MOS晶体管I-V特性曲线仿真 目标:使用cadence绘制晶体管的I-V特性曲线(dc仿真) 流程: 新建原理图,将MOS管的栅极电压设为变量Vg,漏极电压设为变量Vd 打开ADEL,点击Variables——Copy From Cellview添加变量;并选择dc仿真,对Vd进行扫描 以Vg作为参变量进行仿真,点击Tools——Parametric Analysis进行设置 选择漏极电流作为输出,进行仿真即可得到I-V特性曲线 ...

skycmq的博客 1万+

设计原则之接口和面向接口编程

当我们谈到接口的时候,通常会涉及以下几种含义,下面先简单介绍。 我们经常说一个库或者模块对外提供了某某API接口。通过主动暴露的接口来通信,可以隐藏软件系统内部的工作细节。这也是我们最熟悉的第一种接口含义。 第二种接口是一些语言提供的关键字,比如Java的interface。interface关键字可以产生一个完全抽象的类。这个完全抽象的类用来表示一种契约,专门负责建立类与类之间的联系。 第三种接...

wuyufa1994的博客 685

vivado 工程修改芯片型号

vivado工程芯片与实际板子不匹配时,需要修改工程的芯片型号,并对原工程的ip进行同步更新,之后生成新的bit文件,烧录到板子中

k7126685的博客 1万+

C++中的继承与多态

本文深入探讨了C++中的类继承机制,解释了继承的基本概念、语法格式及其在工程中的应用。文章详细介绍了类继承的三种方式(public、protected、private)及其对访问权限的影响,强调了public继承的广泛适用性。此外,文章还讨论了基类与派生类之间的赋值兼容性、内存切片现象以及继承中的作用域问题。通过示例代码和图示,文章展示了继承中可能出现的特殊现象,如隐藏和覆盖,并提供了实际代码运行结果以加深理解。最后,文章总结了继承在C++编程中的重要性,强调了其在扩展类功能和提高代码复用性方面的优势。

m0_73987904的博客 2110

Depth Anything 3实战:如何用DINOv2 Transformer一键生成3D高斯点云?

本文详细介绍了Depth Anything 3(DA3)模型如何利用DINOv2 Transformer架构,实现从单张或多视角图像一键生成高质量3D高斯点云。DA3通过统一的深度-射线表示和自适应注意力机制,简化了传统复杂的3D重建流程,并可直接微调用于3D高斯渲染,为图形学、CV和内容创作领域提供了高效的端到端解决方案。

postgres8guard的博客 722

实战指南 | 利用TSMaster的C小程序实时监控DBC报文发送周期

本文提供了一份利用TSMaster的C小程序实时监控DBC报文发送周期的实战指南。通过创建用户变量、编写C小程序核心逻辑并关联图形模块,工程师可以直观地可视化关键报文(如ID 0x64)的发送间隔,从而快速发现周期异常,提升汽车电子开发和测试中总线问题定位的效率与实时性。

weixin_29178069的博客 417

继承和多态

什么是继承什么事组合什么又是多态那,他们之间有什么关系?我们为什么需要他们,它们又有何意义呢,让我们带着这些疑问一起来探索吧😊😊。以上就是今天要讲的内容,本文仅仅简单介绍了继承和多态,有不足的地方还请各位道友多多海涵。文章到此结束了,如果文章对您有所帮助,还请三连一波😂。让我们一起期待下一篇,认识String。二、总结。

2302_81265429的博客 1697

【SpringBoot香樟转转】debugDay01

在学黑马程序员的苍穹外卖项目,刚开始学,想用maven编译一下代码,结果报错,找不到符号。本着先理解原则,看着能找到这个变量呀。

m0_72696598的博客 1737

【多态】有关多继承和菱形继承的多态

博主会持续更新本篇文章主要讲解多继承和菱形继承的多态的相关内容。

有趣的中国人的博客 1493

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

王老师青少年编程 4785

Windows 11 安装 OpenClaw(龙虾):不用WSL、不用虚拟机、启动、使用、停止、卸载

本文详解 Windows 11 原生安装 OpenClaw(龙虾)全流程,无需 WSL 或虚拟机。涵盖环境配置、安全警示、模型接入(如通义千问)及技能初始化。提供启动、文件自动化操作、停止与卸载的完整指南,并附常见认证过期解决方案。助您快速部署本地 AI 智能体,实现电脑操作自动化,提升工作效率。

寒水馨 · 轻量级技术文档 · hanshuixin.org 900

封装、继承、多态

面向对象编程(Object-Oriented Programming, OOP)的三大特征是封装、继承和多态,它们共同构成了面向对象编程的基本原则,有助于编写模块化、可维护和可扩展的代码。

m0_74064480的博客 5240

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【C++】继承与多态

C++继承与多态万字详解!!

Pursue quality, not quantity. 2257

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【C++】继承和多态

继承的定义格式如下,Person是父类/基类Student是子类/派生类public为继承方式继承和组合public继承是一种is-a的关系。也就是说每个子类对象都是一个父类对象。组合是一种has-a的关系。假设B组合了A,每个B对象中都有一个A对象。什么是组合呢?如下代码就是组合,其中是B组合了Aclass Apublic:int _a;A a;优先使用对象组合,而不是类继承。继承允许我们根据父类的实现来定义子类的实现。

YoungMLet的博客 1135

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

继承与多态

本文系统介绍了面向对象编程中继承与多态的核心概念。在继承部分,详细阐述了三种继承方式(public/protected/private)的特点、类模板继承的三种情形、基类与派生类转换规则、作用域处理原则,以及默认成员函数的生成机制。特别分析了多继承引发的菱形继承问题及虚继承解决方案,并对比了继承与组合的优缺点。多态部分则深入讲解了动态多态的实现条件、虚函数机制、override/final关键字使用,以及虚函数表和多态底层原理。文章还区分了动态绑定与静态绑定的差异,并介绍了纯虚函数和抽象类的特性。全文通过丰

DXY798的博客 1128

Python 继承和多态

本文介绍了Python中面向对象编程的核心概念——继承与多态。继承允许子类复用父类的属性和方法,通过单继承和多继承实现代码复用与扩展,其中多继承需要注意方法解析顺序(MRO)。多态则通过统一接口实现不同行为,使代码更具灵活性。文章通过动物类示例演示了继承的实现方式、方法重写、super()的用法以及多态的应用场景,并分析了工厂模式等常见设计模式。最后提醒开发者避免滥用继承,注意多继承的复杂性,并合理使用super()方法。这些OOP特性可显著提升代码的可维护性和扩展性。

余子越的博客 1277

C++中的继承与多态_多态

C++中的继承与多态2 1. 多态的概念 1.1 概念 2. 多态的定义及实现 2.1多态的构成条件 ​编辑2.2 虚函数 2.3虚函数的重写 2.4 C++11 override 和 final 2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类 3.1 概念 3.2 接口继承和实现继承 4.多态的原理 4.1虚函数表 4.2多态的原理 4.3 动态绑定与静态绑定 5.单继承和多继承关系的虚函数表 5.1 单继承中的虚函数表 5.2 多继承中的虚函数表 5

2301_79746169的博客 1623

Java—继承与多态

目录 1、继承 1.1、继承的定义 1.2、继承的使用场景 1.3、构造器 1.4、protected关键字 1.5、谨慎继承 2、多态 2.1、多态的定义 2.2、多态的实现方式 2.2.1、基于继承实现的多态 2.2.2、基于接口实现的多态 1、继承 1.1、继承的定义 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码,能够大...

weixin_48112109的博客 5458

继承、多态

继承 继承:需要定义独立的类,将其他类的共性内容抽取到该独立的类中,让其他类和这个独立类的产生一种关系: "继承"关系 继承的好处: 1)提供了代码的复用性 (代码结构清晰) 2)提供了了代码的维护性 3)类和类产生的这种"继承关系",是多态的前提条件 继承的关系也是一种弊端,类和类产生,耦合性就增强了 开发的原则:Java很多的开发原则都要遵循下面这个:低耦合,高内聚 耦合:尽量的一个类能完成的事情一个类去完成,不要产生过多的关系. (spring框架的IOC:控制反转)

zhaoying_ZY的博客 1195

Java 继承 多态

父类引用 子类对象不一样的时候,调用重写的方法,所表现出的行为不一样,这种思想————多态(大白话)不同对象的引用,调用同一个方法,产生的结果不一样————多态。

2401_83177222的博客 1335

【C++———继承和多态】

继承和多态是C++这门面向对象语言十分重要的语法,它们对于提高C++代码的简洁性和可复用行有着重要的作用,同时继承和多态也符合我们现实生活中的绝大多数场景。下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。在上面所举的例子中,Person被称作基类(父类),Student被称作派生类(子类),继承方式主要有3种分别是公有继承(public),保护继承(protected),私有继承(private),上面所采用的是公有继承,3者的区别见下面的模块。

Z15255808023的博客 1750
上一篇: 令人耳目一新的鸭子
下一篇: 封装
DoubleSRZee
博客等级 码龄10年 7粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值