08_面向对象高级_多态

Python | 面向对象编程进阶OOP特征:继承与多态 本文介绍了Python面向对象编程中的继承和多态概念。在继承方面,阐述了单继承的语法和特点,子类可以继承父类的全部方法,同时保留自己的特性方法;讲解了Python支持的多重继承机制及其方法调用规则(广度优先);还说明了super()在继承中的使用方法。关于多态,指出Python采用"鸭子类型"而非强制类型检查,只要对象具有相应方法属性即可,不依赖特定继承关系。文章通过代码示例展示了继承的实际应用场景,如猫狗类继承动物类的案例,帮助理解面向对象编程的核心特性。 阅读详情

多态

1. 什么是多态?

“多态” 是在 “继承” 的基础上实现的一种现象,具体表现为:对象多态、行为多态。

public class HelloWorld {
    public static void main(String[] args) {
        // 1. 对象多态
        Human h1 = new Student();
        Human h2 = new Teacher();

        // 2. 行为多态
        h1.run();  // 学生跑得贼快~~
        h2.run();  // 老师跑得贼快~~
    }
}

class Human {
    public void run() {
        System.out.println("人会跑步~~");
    }
}

class Student extends Human {
    public void run() {
        System.out.println("学生跑得贼快~~");
    }
}

class Teacher extends Human {
    public void run() {
        System.out.println("老师跑得贼快~~");
    }
}
2. 注意事项

多态是对象或行为的多态,Java中的属性 (成员变量) 不谈多态。

public class HelloWorld {
    public static void main(String[] args) {
        // 1. 对象多态
        Human h1 = new Student();
        Human h2 = new Teacher();

        // 2. 属性(成员变量)是没有多态的
        System.out.println(h1.name);  // "父类 Human"
        System.out.println(h2.name);  // "父类 Human"
    }
}

class Human {
    public String name = "父类 Human";
}

class Student extends Human {
    public String name = "子类 Student";
}

class Teacher extends Human {
    public String name = "子类 Teacher";
}
3. 多态的好处

3.1 在多态形式下,可以实现解耦合,右边对象可以随时切换,后续业务随机改变

// 当 Student() 不好用时,完全可以不改变下面的h1.run()...等代码,直接换成 Teacher() 即可
        Human h1 = new Student();
        h1.run();
        h1.get();
        h1.xxx......
        ......

3.2 定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强,更便利

public class HelloWorld {
    // main方法,程序入口
    public static void main(String[] args) {
        Human h1 = new Student();
        Human h2 = new Teacher();

        // 可以使用父类类型的变量作为形参,可以接收一切子类对象,方便到时候修改
        goToSchool(h1);
        goToSchool(h2);
    }

    // 自定义方法
    public static void goToSchool(Human h) {
        System.out.println(h + "去学校了");
    }
}

class Human {

}

class Student extends Human {

}

class Teacher extends Human {

}
4. 多态的类型转换

种类:

  • 自动类型转换 —— 例如 Human h = new Teacher()
  • 强制类型转换 —— 例如 Teacher t = (Teacher) h

作用:通过把对象转换成真正的类型,从而解决了多态下不能调用子类独有方法的问题。

注意:

  • 存在继承时,就可以强制类型转换,编译阶段不会报错;
  • 但是在运行阶段,如果发现对象的真实类型与强制转换后的类型不同,就会报错!( ClassCastException )
  • 因此,强制类型转换前,使用 instanceof 判断当前对象的真实类型。
public class HelloWorld {
    public static void main(String[] args) {
        // 1. 对象多态
        Human h1 = new Student();
        Human h2 = new Teacher();

        // 2. 行为多态
        h1.run();  // 学生跑得贼快~~
        h2.run();  // 老师跑得贼快~~

        // 3. 对象无法使用自己的独有功能
//      h1.test()    // 报错
//      h2.teach()   // 报错

        // 4. 想要使用独有的功能,就必须强制类型转换
        Student s = (Student) h1;
        Teacher t = (Teacher) h2;

        s.test();  // 学生需要考试
        t.teach();  // 老师需要教学

        // 5. 如果你不确定 h1 是什么类型的,强制类型转换在编译时没问题,但是运行时可能会报错
//      Teacher tt = (Teacher) h1;  // 运行报错,因为 h1 本质是Student类的对象,不可能转为Teacher类的对象

        // 6. 解决上面的问题
        judge(h1);  // 学生需要考试
    }

    // 自定义方法
    public static void judge(Human h) {
        // 6. 为了解决上面的问题方案,需要利用instanceof做个判断(类型一致返回true,否则返回false)
        if (h instanceof Teacher) {
            Teacher t = (Teacher) h;
            t.teach();
        } else if (h instanceof Student) {
            Student s = (Student) h;
            s.test();
        }
    }
}

class Human {
    public void run() {
        System.out.println("人会跑步~~");
    }
}

class Student extends Human {
    public void run() {
        System.out.println("学生跑得贼快~~");
    }

    // 学生独有功能
    public void test() {
        System.out.println("学生需要考试");
    }
}

class Teacher extends Human {
    public void run() {
        System.out.println("老师跑得贼快~~");
    }

    // 老师独有功能
    public void teach() {
        System.out.println("老师需要教学");
    }
}
基于STM32的智能家用节能控制系统设计 该系统可以实时监测家庭的环境参数,如温湿度、光照强度和人体存在情况,根据设定的节能策略自动控制灯光、空调、风扇等家电设备,从而降低不必要的能源消耗。该基于STM32的智能家用节能控制系统通过多种传感器实现了对家庭环境的实时监测,并结合继电器控制模块实现了对家电设备的自动化控制,从而达到节能减排的效果。根据传感器获取的数据,判断是否需要开启或关闭家电设备,从而降低不必要的能源消耗,达到节能的目的。:继电器的控制引脚连接至STM32的GPIO引脚(如PB0、PB1),用于控制灯光、风扇、空调等家电设备的开关。 阅读详情

相关推荐

用Matlab搞定Delta并联机器人运动学:从建模到正逆解完整流程(附代码)

本文详细介绍了如何使用Matlab实现Delta并联机器人的运动学分析,包括几何建模、正逆解求解及可视化验证。通过符号计算和数值迭代法,解决非线性方程组问题,并提供完整代码示例,帮助读者快速掌握Delta机器人的运动学计算与应用。

weixin_30955617的博客 176

Day08-【Java SE进阶】面向对象高级二——多态、final、抽象类、接口

对象多态:一个人可以是学生也可以是老师,学生和老师都是人的子类,创建人对象让其指向不同的对象,称为对象多态,这里是向下转型的特征。父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是。在Java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员方法。final关键字是最终的意思,可以修饰(类、方法、变量)情况下的一种现象,表现为对象多态和行为多态。定义一个抽象类,在里面定义2个方法。

没有人的博客 925

英飞凌TLF35584 SBC实战:手把手教你配置WDG看门狗与ERR监控(基于AUTOSAR架构)

本文详细介绍了基于AUTOSAR架构的英飞凌TLF35584 SBC芯片WDG看门狗与ERR监控功能的配置方法。通过硬件平台搭建、寄存器级配置、AUTOSAR模块集成及诊断策略优化,帮助开发者快速掌握关键配置技巧,提升嵌入式系统的安全性和可靠性。

weixin_30256901的博客 476

Java零基础笔记08(Java编程核心:面向对象编程高级 {继承、多态})

Java继承与多态要点摘要: 继承:通过extends建立父子关系,子类继承父类非私有成员(变量/方法)。继承特点:单继承(支持多层继承)、Object为所有类的父类、成员访问遵循就近原则(super访问父类成员)。 方法重写:子类重写父类方法需保持声明不变(@Override注解),常用于toString()等场景。构造器调用规则:子类构造器先调用父类构造器。 多态:表现为对象多态(父类引用指向子类对象)和行为多态(方法运行看子类,成员变量看父类)。优势:提高代码扩展性,父类参数可接收子类对象。类型转换:

m0_63181360的博客 744

即梦 AI 全功能零基础详细教程(纯技术版)

即梦 AI 是一款多模态 AI 生成工具,主打文本生成视频、图片生成视频、角色一致性生成、音画同步等核心功能,依托自研 AI 视觉模型,实现从文本 / 图片 / 音频素材输入,到高清视频、图像内容输出的全流程 AI 创作,支持短视频、短剧、创意素材等多场景创作,具备操作门槛低、生成效率高、画面可控性强的技术特点。@为工具内置引用指令,作用是锁定指定素材 / 角色,强制 AI 按照该素材的核心特征生成内容,无额外付费、解锁要求,免费使用。剧本拆分:将短剧拆分为单镜头(15 秒内 / 个)

2501_92061023的博客 5810

高通Camx架构调试不求人:手把手教你开UMD/KMD Log与Dump图像(附离线Log合成脚本)

本文详细介绍了高通Camx架构的调试方法,包括UMD/KMD Log的精准配置与图像Dump技术,帮助工程师快速定位移动影像系统中的问题。通过实战案例和自动化脚本,提升调试效率,适用于图像色彩异常、帧率波动等常见问题的诊断与解决。

weixin_30516243的博客 254

python_day08 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程...

本节课内容: 接口与归一化设计多态与多态性封装面向对象高级异常处理网络编程 接口与归一化设计 class Interface:#定义接口Interface类来模仿接口的概念,python中压根就没有interface关键字来定义一个接口。 def read(self): #定接口函数read pass def write(self): #定义接口...

weixin_30439031的博客 140

ubuntu18.04在carla中导入Roadrunner自建的地图

进入Carla根目录下的Import文件夹在Import文件夹下面新建一个文件夹 这里我取名为RoadA进入新建的文件夹,创建json文件,json文件的名字与文件夹名字相同再将从RoadRunner中导出的地图文件夹(map)放入新建的文件夹目录下重点关注.fbx和.xodr文件然后打开新建的json文件添加并修改如下代码name为RoadRunner中导出的地图文件夹名字。

justinyjf的博客 1898

Day08:继承与派生,多态,封装,绑定与非绑定方法,面向对象高级(反射,__str__,__del__)...

上节课复习:1.编程思想 面向过程 核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么 基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题流程化,进而简单化 缺点:可扩展性差 面向对象 核心是对象二字,对象是特征(变量)与技能(函数)的结合体 基于该...

weixin_30781433的博客 303

告别死记硬背!用实际案例带你玩转UE5编辑器界面(附场景搭建练习)

本文通过实际案例教学,带你轻松掌握Unreal Engine5编辑器界面的核心功能。从创建基础场景到添加光源和可交互对象,逐步讲解内容浏览器、模式面板、世界大纲等模块的协同工作方式,告别死记硬背的学习模式。附场景搭建练习,助你快速上手UE5开发。

weixin_30566063的博客 729

YOLOv5源码逐行超详细注释与解读(2)——推理部分detect.py

全网最详细的YOLOv5之推理部分detect.py源码逐行注释,近四万字的超详细讲解!小白入门必看!

路人贾的博客 5万+

面向对象——多态

多态指同一个对象在不同情境下的多种表现形式。它分为对象的多态性和类型的多态性。对象的多态性:同一个对象可以被不同类型的引用指向,从而在不同情境下以不同方式使用。这体现了一个对象能够通过不同的名称和描述来表现自己。类型的多态性:同一类型的引用可以指向该类型的不同子类对象。在不同的情境下,可以使用同一个类型的引用来操作不同的对象实例。本质:在不同场景中,同一个方法调用可以有不同的实现。定义:抽象类是包含抽象方法的类,无法直接实例化。使用场景:用来捕获子类的通用特征和行为,实现代码复用。

venus_patton的博客 2052

PCL 法线定向【2025最新版】

几种法线定向方法的PCL代码实现。

点云侠的博客 2804

头歌平台Java实验:Java面向对象高级

2.实现Demo接口,完善接口中的show方法,打印输出 “实现了接口中的show方法”System.out.println("实现了接口中的show方法");1.编写MyInterface接口,含一个抽象方法sayHi,返回值为void。System.out.println("接口定义完成");根据提示,在右侧编辑器补充代码,完成接口的书写和接口的实现。实现了接口中的show方法。

jing13_13的博客 7518

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java 面向对象高级

什么是多态?多态是在继承、实现情况下的一种现象,表现为:对象多态、行为多态。比如:Teacher和Student都是People的子类。

2303_82176667的博客 943

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JAVA—面向对象编程高级

学习了一定基础后,开始更加深入的学习面向对象,包含static,final两个关键字,面向对象编程三大特征之继承和多态。以及对于抽象类,内部类,接口,枚举,泛型的学习。

Hismybestlove的博客 2384

VC中sqlite的使用

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

Java基础视频教程第08天_面向对象之多态

一、面向对象——多态——概念 1、概念:某一类事物的多种存在形态。 例如: 猫 m = new 猫(); 狗 n = new 狗(); 动物 a = new 猫(); 动物 a = new 狗(); 动物是猫和狗具体事物中抽取出来的父类型; 这里父类引用

yc081216的专栏 540

第08章:面向对象-高级

抽象的用来修饰:类、方法类:抽象类:不能实例化。方法:抽象方法:没有方法体,必须由子类实现此方法。使用abstract修饰。略。为了语言的自洽。

weixin_65644655的博客 660

最新Java基础系列课程--Day08-面向对象高级

本章节主要讲解JAVA面向对象的高级特性,抽象、多态和接口的知识

软件开发实战项目分享 3220

Day08 - 面向对象编程基础

Day08 - 面向对象编程基础 活在当下的程序员应该都听过“面向对象编程”一词,也经常有人问能不能用一句话解释下什么是“面向对象编程”,我们先来看看比较正式的说法。 把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)...

Laic Zhang的博客 1477

JAVASE-08:多态、抽象类、接口

1. 多态 指的是一种事物在不同时刻,所表现出的不同状态 1.1 多态的前提: a. 要有继承,没有继承,多态就无从谈起 b. 要有方法重写(当然不重写也可以 ,但是会失去意义) c. 父类引用指向子类对象 — 父 f = new 子(); public class MyTest2 { public static void main(String[] args) { Cat cat = new Cat(); cat.eat(); //采用多态的形式来

Hannen的博客 317

Java入门基础-11面向对象高级(二)

什么是多态?多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。多态的具体代码体现:有继承/实现关系;存在父类引用了子类对象;存在方法重写。多态是对象、行为的多态,Java中的属性(成员变量)不谈多态。// 父类public String name = "父类People的名称";System.out.println("人类可以跑");public String name = "子类Teacher的名称";@Override。

m0_64126885的博客 1228

面向对象_高级2

(Interface)在 Java 中是一个完全抽象的类型,定义了一组方法的规范,而不包含这些方法的实现。​ 接口支持实现类的多态性意味着你可以用同一个接口类型的引用来指向不同的实现类对象,并通过这个引用来调用接口定义的方法。虽然父子类之间的继承和接口实现都涉及到代码的复用和行为的共享,但它们的用途和设计意图有所不同。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。提高安全性,提高程序的可读性。理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

一枚工科研究生 962

C++面向对象编程高级培训

C++面向对象编程高级培训 C++面向对象编程高级培训C++面向对象编程高级培训 2011-08-20 13:55 一、课程目标本次课程围绕C++面向对象编程这一课题,深入的讲解C++ OOP语言机制,以及运用面向对象技术有效架构C++应用。通过本次课程的学...

410

黑马程序员——面向对象08(多态)

——- android培训、java培训、期待与您交流! ———- 1.1,多态 多态:可以理解为事物存在的多种体现形态。1.2,多态的体现 1、父类的引用指向了自己子类的对象。 2、父类的引用也可以接收自己的子类对象。 如: Animal a = new Cat(); 其中就将父类型的 a 引用指向了子类的对象

a378983320的博客 389

08.面向对象编程基础

在Python中可以使用class关键字定义类,然后在类中通过之前学习过的函数来定义方法,这样就可以将对象的动态特征描述出来,代码如下所示。# __init__是一个特殊方法用于在创建对象时进行初始化操作# 通过这个方法我们可以为学生对象绑定name和age两个属性print('%s正在学习%s.' % (self.name, course_name))# PEP 8要求标识符的名字用全小写多个单词用下划线连接# 但是部分程序员和公司更倾向于使用驼峰命名法(驼峰标识)

ngczx的博客 1075
上一篇: 07_面向对象高级_继承
下一篇: 09_面向对象高级_final与常量
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值