Java-面向对象(多态)

JAVA面向对象多态 向上转型是 “抽象化”(用父类统一接口),向下转型是 “具体化”(还原子类特性)。向上转型的本质是 **“缩小” 对象的访问范围 **:父类引用仅能调用父类声明的接口(方法 / 变量),但对象的实际类型仍是子类(可通过。即使父类引用实际指向子类 A 的对象,也无法直接转为子类 B 的类型(除非子类 B 是子类 A 的子类)。(包括重写的方法和子类特有的方法),行为与直接创建子类对象一致。(4)编译类型看定义时=号的左边,运行类型看=号的右边→_→。(3)要求父类的引用必须指向当前的目标类型的对象。 阅读详情

面向对象(多态)

第一部分

1、多态的概念

某一类事物的多种存在形态。

2、多态的举例

人:男人,女人

动物:猫,狗

3、多态的体现

3.1、父类的引用指向了自己的子类对象;
3.2、父类的引用也可以接收自己的子类对象;

4、多态的前提

4.1、必须类与类要有继承关系,要么继承,要么实现;
4.2、通常情况下还要存在覆盖;

5、多态的好处

多态的出现大大的提高了代码的扩展性;

6、多态的弊端

提高了代码的扩展姓,但是只能使用父类的引用访问父类中的成员(成员函数和成员变量);

7、多态的初相在代码中的特点(多态使用的注意事项)

千万不要出现这样的操作,就是将父类对象转成子类类型,我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升也可以被强制转换,多态自始至终都是子类对象在做着变化;

//这是是不正确的,

Animal a = new Animal();

Cat c = (Cat)a;

8.图形展现

9、多态的举例理解

8.1、向上转型:毕老师和毕姥爷,毕老师的父亲是毕姥爷,毕姥爷讲的是工商管理,毕老师讲的是java,这是毕老师就覆盖了父类建立了自己的行为,讲的是java;现在有人要来找毕姥爷去讲课,但是现在毕姥爷不在家,但是毕老师在家,这时毕老师就化妆为毕姥爷,注意这是一个向上转型的过程,毕老师就提升了;

毕老师 x = new 毕老师();-->向上转型;

x.讲课();//但是毕老师脱口而出的是java;复写了父亲的功能建立了自己的特有的功能;运行的结果是子类的结果,

8.2、向下转型:现在毕老师的朋友来了,找毕老师去看电影,推门一进屋,看见是毕姥爷,但是现在的毕姥爷是毕老师化妆的,不知道这是毕老师,这时就向下转型,毕姥爷就卸妆成毕老师;

毕老师 y = (毕老师)x;-->向下转型;

x.看电影();

8.3、在向上转型和向下转型至始至终都是毕老师一个人在变化,只有毕老师一个人在变化;多态至始至终都是子类在做着变化;

10.多态的异常

类型转换异常:java.lang.ClassCastException:

11.代码体现

abstract class Animal 
{
	public abstract void eat();
}
class Cat extends Animal
{
	public void eat()
	{
		System.out.println("吃鱼");
	}

	public void catchMouse()
	{
		System.out.println("抓老鼠");
	}
}

class Dog extends Animal
{
	public void eat()
	{
		System.out.println("吃骨头");
	}
	public void kanJia()
	{
		System.out.println("看家");
	}
}

class Pig extends Animal
{
	public void eat()
	{
		System.out.println("饲料");
	}
	public void gongDi()
	{
		System.out.println("拱地");
	}
}
class  DuoTaiDemo2
{
	public static void main(String[] args) 
	{
//		Cat c = new	Cat();
//		c.eat();
//		c.catchMouse();
//		Dog d = new Dog();
//		d.eat();
//		d.kanJia();
//		Cat c = new Cat();
//		method(c);

//		function(new Dog());
//		function(new Pig());
//		function(new Cat());
//		Animal a = new Cat();//类型的提升;
//		Cat c = (Cat) a;//父类引用转成子类对象
//		c.catchMouse();

		function(new Dog());
		function(new Cat());
		function(new Pig());
	}
	public static void function(Animal a)
	{
		a.eat();
		if(a instanceof Cat)//这是引用数据类型的判断,用instanceof判断,这是一个关键字,基本数据类型用的是==
		{
			Cat c = (Cat)a;//将动物这个类型转换成猫,向下转型
			c.catchMouse();//调用子类特有的功能
		}
		else if (a instanceof Dog)
		{
			Dog d = (Dog)a;
			d.kanJia();
		}
		else
		{
			Pig p = (Pig)a;
			p.gongDi();
		}
	}
}

12、运行的结果

第二部分

1、多态特点的体现

把事物不断的向上抽取,都是可以找到共同点的,只要找到了对象的共同所属类型,那么就可以指挥一批对象去做事情;

2、举例说明

需求:

基础班学生:

学习,睡觉

就业班学生:

学习,睡觉

可以将这两类事物进行抽取;

代码体现

<span style="font-family:SimSun;font-size:14px;">//将基础班和高级班的学生两类事物进行抽取
abstract class Student
{
	public abstract void study();
	public void sleep()
	{
		System.out.println("躺着睡");
	}
}
//分离出来一个单独的对象,单独抽取出来
//建立工具类,由工具类来完成那些调用的动作,主函数只要来找这个工具类就可以了
class DoStudent 
{
	public void function(Student s)
	{
		s.study();
		s.sleep();
	}
}
class BaseStudent extends Student
{
	public void study()
	{
		System.out.println("base study");
	}
//	复写父类的方法;
	public void sleep()
	{
		System.out.println("坐着睡");
	}
}
class AdvStudent extends Student
{
	public void study()
	{
		System.out.println("adv study");
	}
	public void sleep()
	{
		System.out.println("躺着睡");
	}
}
class DuoTaiDemo3 
{
	public static void main(String[] args) 
	{
		DoStudent ds = new DoStudent();
		ds.function(new BaseStudent());
		ds.function(new AdvStudent());
	}
}</span><strong style="font-size:18px;">
</strong>

3、运行后的结果

4、在非静态多态中成员函数的特点

这边指的是在多态中,也就是说就是在父类引用指向子类对象的时候才具备的特点;
|--在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,那么编译就通过,如果没有那么就编译失败;

|--在运行时期:参阅的是对象所属的类中是否有调用的方法;

5、在非静态多态中成员变量的特点

在多态中,成员变量:无论是编译还是运行,都是参考左边(引用型变量所属的类);

6、在多态中,静态成员函数的特点

无论编译和运行,都是参考左边(包括静态成员变量);

7、多态的扩展示例

需求:数据库的操作
数据是:用户信息
1、连接数据库
2、操作数据
3、关闭数据库

代码体现

interface UserInfoDao
{
	public void add();
	public void delect();
}
class UserInfoByJDBC implements UserInfoDao
{
	public void add()
	{
	
	}
	public void delect()
	{
	
	}
}
class UserInfoByHibernate implements UserInfoDao
{
	public void add()
	{
	
	}
	public void delect(){}
}
class DBOperate 
{
	public static void main(String[] args) 
	{
		UserInfoDao ui = new UserInfoByJDBC;//利用里多态的
		ui.add();
		ui.delect();

	}
}

第三部分

我的总结

1、要想有多态的出现,那么类与类之间必须要么有继承关系,要么有实现关系;
2、多态的出现既可以将子类向下转型又可以向上转型;
3、在多态的过程中,自始自终都是子类在做着变化;
4、注意多态在静态和非静态中的成员函数和成员变量分别在编译时期和运行时期的操作;
5、多态的出现大大的提高了代码的复用性;
java面向对象多态练习 1 (多态)定义榨汁机JuiceMachine 有榨汁方法makeJuice,传入相应的水果。 如果传入的是Apple 输出 “流出苹果汁” 传入的是Orange 输出 “流出橙汁” 传入的是Banana 输出 “流出香蕉酱” abstract class Fruit{ abstract void makeJuice(); } class JuiceMachine{ public s... 阅读详情

相关推荐

论文解析-sciPENN

用这2个CITE-seq共有的protein作为训练集,分别将他们特有的protein作为测试集,评估sciPENN对CITE-seq数据集中缺失的protein丰度预测准确度。来自Seurat 4 的PBMC数据集,样本被注射水疱性口炎病毒 (VSV) 载体 HIV 疫苗,数据集包含每个样本注射疫苗0天、3天、7天的CITE-seq数据。PBMCs作为训练集,MALT作为测试集,利用scRNA-seq测试17个蛋白质表达水平。Monocyte:随机取4个样本作为训练集,剩余4个样本作为测试集。

weixin_46065198的博客 1023

【JAVA】面向对象三大特性之多态

本文深入解析Java多态的核心概念与实现机制。多态作为面向对象编程三大特性之一,通过继承体系下的方法重写实现"一个接口,多种实现"的效果。文章详细阐述了多态的实现条件(继承、重写、父类引用调用),并通过动物类继承体系代码示例演示了多态的具体应用。同时对比了方法重写与重载的区别,解释了静态绑定与动态绑定的原理。此外,文章还系统介绍了向上转型(子类对象作为父类使用)和向下转型(父类引用还原为子类对象)的转换机制及使用场景,特别指出了向下转型的安全隐患及instanceof操作符的解决方案。全

m0_68002296的博客 704

硬件作品3----STM32F103RCT6最小系统板MCU配置

电路未调试成功,目前刚打板,后续需要补充或者改版另行注明。

weixin_58364194的博客 5568

【Java】面向对象:继承、组合和多态

面向对象三大特征之继承和多态

trong_ 的烂笔头 1553

最终篇——SWAT模型的建立

同理,Soil Data也是同样的方法导入,在Soil Database Options的选项中,选择UserSiol,用同样的方法导入土壤类型,进行重分类。打开窗口后,只定义HRU Thresholdes,其余两个不用设置,设定各数据单元的计算率,这里的10%的意思是计算精度,即分成级HRU计算单元太小,小于平均计算单元的10%,我们就不对这HRU单元进行计算(也就是说太破碎的计算单元不进行计算),若选择0%意味着全部进行计算,需要耗费大量的内存和时间,对计算机要求较高,不建议。

m0_72556434的博客 5623

台达伺服B3驱动器参数的设定和CN1的接法

3. B2的电子齿轮比是直接设定P1-44(分子)和P1-45(分母)就就可以的,但是B3的有个隐藏的细节,就是P1-44的默认值77216不用去更改,这是官方客服说的,需要改的是P1-45这个参数,比如说,我使用的丝杆螺距是5mm的,那么就是以5000脉冲走完5mm为一圈,则就把P1-45设定为5000即可;我的是三菱FX3S系列的PLC,是NPN型的,输出点是24V-作为信号的,所以接41、37,具体可参考B3的。,跟着客服的讲解操作才解决的,以下就是解决方法,希望能够帮到需要的各位。

qq_38681017的博客 1万+

基于Java的面向对象的多态示例

这些Java示例完整展示了面向对象多态性的核心概念,同时体现了Java语言特性(如接口、抽象类、注解等)。通过合理运用多态性,可以设计出高内聚、低耦合的软件系统,符合面向对象设计原则(OODP)。必须保持方法签名一致(参数类型、顺序、数量)

darkhorsefly的专栏 897

C#调用企业微信JS-Sdk实现扫描二维码

企业微信JS-SDK是企业微信面向网页开发者提供的基于企业微信内的网页开发工具包。通过使用企业微信JS-SDK,网页开发者可借助企业微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用企业微信分享、扫一扫等企业微信特有的能力,为企业微信用户提供更优质的网页体验提示:生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是H5应用调用企业微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。

清浅 939

java 多态_Java面向对象 —— 多态

前两天已经相继介绍了Java面向对象的三大特性之中的封装、继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~首先讲一下什么是多态,以及多态需要注意的细节 什么是多态:一个对象具备多种形态,也可以理解为事物存在的多种体现形态(父类的引用类型变量指向了子类对象,或者是接口的引用类型变量指向了接口实现类的对象) 多态的前提:必须存在继承或者实现关系。 多态要注意的细节:多态情况下,子父类存...

weixin_39931362的博客 93

详解账务核心,从入门到精通

本文系统阐述了账务体系的设计原理与实现方法,围绕支付交易的基础设施——账务系统展开深入探讨。文章首先从账务实现原理出发,强调从客户场景中抽象能力的重要性,详细解析了账务总架构及其与外围系统的协同关系。随后重点剖析了账户子系统的设计,包括账户生态、主体管理、结构设计等核心要素,并针对热点账户问题提出了多种创新解决方案。此外,文章还深入探讨了会计日切原理、营销类账务处理等专业领域,最后以支付机构场景为例,全面解析了清结算业务的账务实现模型。全文通过理论结合实践的方式,为构建高效、可靠的账务系统提供了系统性的方法

银行信息系统应用架构详解 532

YOLO26改进策略【卷积层】| CVPR 2024 可变形卷积 v4(DCNv4)无界权重提表达 + 线程合并降冗余,强化模型收敛速度

DCNv4(Deformable Convolution v4)是一种专为广泛视觉应用设计的高效算子,它对DCNv3进行了关键改进,有效解决了DCNv3存在的速度慢和表达能力受限等问题。

Limiiiing的博客 695

初识JAVA-面向对象的三大特征之多态

多态,简单来说就是多种形态,复杂点说就是不同对象去完成某个行为时产生不同的状态。 总的来说:同一件事情,发生在不同对象上,就会产生不同的结果。

2301_76928097的博客 1885

Nacos 从困惑到蒙圈(10)Nacos 适配 人大金仓数据库【最新版】

介绍Nacos适配人大金仓数据库的详细步骤,包括对最新版本的支持改造。

甘蓝的专栏 1423

java面向对象多态_Java面向对象的多态

Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态引用多态的含义就是:父类的引用可以指向它本类的对象,不仅如此父类的引用还可以指向子类的对象,这就是引用多态用简单的代码来看一下引用多态的含义:动物类:Animal1 public classAnimal {2 publicAni...

weixin_31838473的博客 404

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java面向对象的多态_JAVA面向对象的多态是个什么东西?

面向对象的三大特征:封装、继承、多态。在前面已经说了过了封装和继承。今天就来聊聊剩下的多态。多态,从字面内容来看,就是多种形态,多种状态。在java的面向对象中可以从以下两个方面来讲。01不同子类之间的多态在前面我们说继承的时候说到,子类可以继承到父类的方法,继承后可以对方法进行重写。这个时候就会有不同的子类重写的功能是不同的。我们来举个例子,父类是动物类,有一个叫的方法。然后定义两个子类继承自这...

weixin_42416119的博客 180

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【Java面向对象】多态的详细介绍,简单易懂,看这一篇就够了

方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承的基础之上的。简单来说,多态是具有表现多种形态的能力的特征。

Ceylan__的博客 2799

java面向对象多态性_Java 面向对象特性之多态性

多态性面向对象(OOP)三大特性:封装、继承、多态。多态性(polymorphism)指同一行为具有多种不同表现形式,在面向对象程序设计中表现为同一消息可以根据发送对象的类型不同,做出多种不同的行为。多态性的优点多态性能够从一定程度上消除类型之间的耦合关系,通过统一接口方式,不同类的对象可以直接替换,程序更加灵活,可扩展。面向对象多态性存在的三个必要条件继承重写父类引用指向子类对象多态性的实现方式...

weixin_30539081的博客 261

Java面向对象之多态,向上转型我们大家庭的由来

Java面向对象之多态的深度解剖~~~我们大家庭就要来啦~

一年,我很需要这一年 1818

java 多态判断非空_Java面向对象 —— 多态

前两天已经相继介绍了Java面向对象的三大特性之中的封装、继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~首先讲一下什么是多态,以及多态需要注意的细节 什么是多态:一个对象具备多种形态,也可以理解为事物存在的多种体现形态(父类的引用类型变量指向了子类对象,或者是接口的引用类型变量指向了接口实现类的对象) 多态的前提:必须存在继承或者实现关系。 多态要注意的细节:多态情况下,子父类存...

weixin_39690963的博客 93

Java面向对象与多态

在前面学习到的接口和继承中,如果父类只能使用父类的方法,子类可以使用父类和自己的方法,但是有时需要使用父类调用子类重写的父类方法,上面的思路就不再合适,此时就可以使用多态。多态的特点:使用父类引用指向子类的对象,此时父类可以调用子类重写父类的方法,但是调不到子类特有的成员访问成员变量时:看赋值符号左侧是子类还是父类,如果是父类,调用就是父类成员变量,否则调用的是子类成员变量访问成员方法时:看new。

小何代码咖啡馆 1129

Java面向对象三大特征(封装,继承,多态)

什么是多态?多态是在继承、实现情况下的一种现象,表现为:对象多态、行为多态。多态体现为父类引用变量可以指向子类对象。比如:Teacher和Student都是People的子类,代码可以写成下面的样子。

szm0225的博客 1904

Java面向对象三大基本特征之多态

Java面向对象三大基本特征之多态

lv121218的博客 1628

JAVA面向对象之多态

面向对象----多态 多态的前提: 1.必须有以下关系:继承、实现 2.通常都会有重写 多态的好处: 提高程序的扩展性 多态的弊端: 通过父类引用操作子类对象时,只能使用父类中已有的方法,不能操作子类特有的方法。 多态的体现: 父类的引用或接口的引用指向了自己的子类对象 多态转型 当父类的引用* 指向子类对象时,就发生了向上转型,即把子类类型对象转成了父类类型。向上转型的好处是隐藏了子类类型,提高了代码的扩展性。 但向上转型也有弊端,只能使用父类共性的内容,而无法使用子类特有功能,功能有限制。 下面举一个例

weixin_43633742的博客 156

Java面向对象特征之三——多态

Java面向对象特征之三:多态 多态性是指允许不同类型的对象对同一消息做出相应。具有灵活性、抽象、行为共享、代码共享的优势,共享就意味着最大化利用和简洁,还有就是加载速度。 一、多态的作用 消除类型之间的耦合关系。即同一事件发生在不同的对象上会产生不同的结果。 二、多态的理解 1.多态是同一个行为具有多个不同表现形式或形态的能力。 2.多态就是同一个接口,使用不同的实例而执行不同操作。 3....

wangkailili的博客 724

java面向对象之多态

Java 第 一 阶 段 知 识 回 顾 这个是第一阶段的学习路径大家看一下 1.第一阶段java基础语法打**** 2.面向对象打***** 3.单例设计模式打***** 4.接口***** 5.多态*****(面向对象特征之一) 6.异常**** 7.多线程**** 8.同步**** 9.集合***** 10.IO流***** 以上是自己对一阶段的重点归纳 下面我选举(面向对象之多态) 1.什么是多态呢?>>>>>&gt

nxl3260的博客 367

12 Java面向对象之多态

JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类  1. 静态多态:在编译期间,程序就能决定调用哪个方法。方法的重载就表现出了静态多态。  2. 动态多态:在程序运行期间,才能决定调用对象的哪个方法。在继承中,父类对象引用指向子类对象。 动态多态的特点 父类对象可以将引用指向子类对象,也可以指向本类对象。...

weixin_34049032的博客 124
上一篇: 模版方法设计模式
下一篇: 匿名内部类
fyldragonfyl
博客等级 码龄12年 9粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值