JAVA每日作业day6.26

ok了家人们,今天我们学习了面向对象-多态,话不多说我们一起来看看吧

.多态概述

面向对象的第三大特性:封装、继承、多态
我们拿一个生活中的例子来看
生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样
的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样
的。可见,同一行为,通过不同的事物,可以体现出来的不同
的形态。
多态 : 是指同一行为,对于不同的对象具有多个不同表现形
式。
程序中多态 : 是指同一方法 , 对于不同的对象具有不同的实现。
多态前提条件
继承或者实现【二选一】
父类类型指向子类对象【格式体现】 父类类型 变量名 =
new 子类类型 ();
方法的重写【意义体现:不重写,无意义】

.多态的定义和使用

2.1 多态定义格式  

父类类型 变量名 = new 子类类型();
变量名.方法名();

2.2 普通类多态定义的格式

public class Person {public void run(){System.out.println("run...");}}
public class Student extends Person{@Overridepublic void run() {System.out.println("学生大步跑...");}
}
public class Teacher extends Person{@Overridepublic void run() {System.out.println("老师碎步跑...");}}
public class DemoTest {public static void main(String[] args) {Person p01=new Student();p01.run();Person p02=new Teacher();p02.run(); }}

2.3 抽象类多态定义的格式

public abstract class Animal {public abstract void eat();}
public class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃鱼...");}}
public class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃肉...");}}
public class DemoTest {public static void main(String[] args) {Animal a1=new Cat();a1.eat();Animal a2=new Dog();a2.eat();}}

2.4 接口多态定义的格式

public interface MyInter {public void fly();}
public class Bird implements MyInter{@Overridepublic void fly() {System.out.println("鸟靠翅膀飞...");}}
public class Plane implements MyInter{@Overridepublic void fly() {System.out.println("飞机靠动力飞...");}}
public class DemoTest {public static void main(String[] args) {MyInter my01=new Bird();my01.fly();MyInter my02=new Plane();my02.fly();}}

.多态时访问成员的特点

  • 多态时成员变量的访问特点:编译看父类,运行看父类
  • 多态时成员方法的访问特点:编译看父类,运行看子类
public class Fu {int num=20;public void method(){System.out.println("fu...method...");}}
public class DemoTest {public static void main(String[] args) {Fu fu=new Zi();System.out.println(fu.num);fu.method();}}
public class Zi extends Fu{int num=20;public void method(){System.out.println("zi...method...");} }

.多态的好处与弊端

  • 好处:提高了代码的扩展性。实际开发的过程中,父类类
    型作为方法形式参数,传递子类对象给方法,进行方法的
    调用,更能体现出多态的扩展性与便利。
  • 弊端:多态的情况下,只能调用父类的共性内容,不能调
    用子类的特有内容。
public abstract class Animal {public abstract void eat();}
public class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃鱼...");}}
public class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃肉...");}public void lookHome(){System.out.println("狗看家...");}}
public class DemoTest {public static void main(String[] args) {Animal animal=new Cat();animal=new Dog();/* 父类类型的变量可以接收该父类的所有子类对象 *//*Dog dog=new Dog();method01(dog);Cat cat=new Cat();method02(cat);*/Animal a01=new Dog();//a01.lookHome();无法访问子类独有的方法Animal a02=new Cat(); method(a01);//实参赋值给形参:Animal a01 = new Dog();method(a02);//实参赋值给形参:Animal a02 = new Cat();
}
//优化代码:方法的形参为父类类型,就可以接收该父类的所 有子类对象 public static void method(Animal animal){animal. Eat();
}//定义方法,可以接收Dog类对象和Cat类对象,并在该方法 中调用eat方法public static void method01(Dog dog){dog. Eat(); 
}public static void method02(Cat cat){ cat. Eat();} 
}

4.2 类型转换

  • 向上转型:子类类型向父类类型向上转换的过程,这个过
    程是默认的。
Fu fu = new Zi();
  • 向下转型:父类类型向子类类型向下转换的过程,这个过
    程是强制的。
     Aniaml animal = new Cat();Cat c = (Cat)animal;
//向下转型c.catchMouse();
// 可以访问 子类独有的功能,解决多态的 弊端
  • instanceof关键字
        为了避免ClassCastException 的发生, Java 提供了 instanceof
        关键字,给变量做类型的校验。
 变量名 instanceof 数据类型如果变量属于该数据类型,返回true。如果变量不属于该数据类型,返回false。
public abstract class Animal {public abstract void eat();}
public class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃鱼...");}}
public class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃肉...");}public void lookHome(){System.out.println("狗看家...");}}
public class DemoTest {public static void main(String[] args) {Animal animal=new Dog();animal. Eat();//animal.lookHome();//编译报错 无法调用子 类特有的功能Dog dog=(Dog)animal;dog.lookHome();// Cat cat=(Cat)animal; 类型转换异常if(animal instanceof Dog){ Dog d=(Dog)animal;d.lookHome();}}}

.多态的几种表现形式

5.1 形参多态

public abstract class Animal {public abstract void eat();}
public class Cat extends Animal{@Override public void eat() {System.out.println("猫吃鱼...");}public void catchMouse(){System.out.println("猫抓老鼠...");}}
public class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃肉...");}public void lookHome(){System.out.println("狗看家...");}}
public class DemoTest {public static void main(String[] args) {Dog dog=new Dog();method(dog); Cat cat=new Cat();method(cat);}public static void method(Animal animal){animal. Eat();if(animal instanceof Dog){Dog dog=(Dog)animal;dog.lookHome();}if(animal instanceof Cat){Cat cat=(Cat)animal;cat.catchMouse();}}}

5.3 返回值多态

public abstract class Animal {public abstract void eat();}
public class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃鱼...");}public void catchMouse(){System.out.println("猫抓老鼠...");} }
public class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗吃肉...");}public void lookHome(){System.out.println("狗看家...");} }
public class DemoTest {public static void main(String[] args) {Cat cat=new Cat();Dog dog=new Dog();Animal a01 = method01(cat);Animal a02 = method01(dog);Animal animal = method02();}public static Animal method01(Animal animal) {//一系列操作,操作后,返回操作后的对象return animal;}public static Animal method02(){/* Dog dog = new Dog(); return dog;*/ return new Cat();}}

ok了家人们明天见

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

山水风景视频素材去哪里下?去哪里找?山水风景下载网站分享

在这个数字时代,视频已经成为最直观、有效的传达情感和分享故事的工具。对于那些渴望通过视频传递视觉美感和情感共鸣的创作者来说,拥有高质量的山水风景视频素材是关键。互联网虽然是一个信息量庞大的平台,但找到令人赞叹的山水风景视频素材…

【Linux】使用ntpdate同步时间

ntpdate 是一个在 Linux 系统中用于同步系统时间的命令行工具,它通过与 NTP 服务器通信来调整本地系统时钟。然而,需要注意的是,ntpdate 已经被许多现代 Linux 发行版弃用。 安装 yum install -y ntpdate 查看时间 date同步时间 ntpdate ntp…

问界M9累计大定破10万,创中国豪车新纪录

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 6月26日消息,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东今日宣布,问界M9上市6个月,累计大定突破10万辆。 这一成绩,也创造了中国市场…

postman汉化中文(Windows)

Postman 是一款专业的 API 开发工具,为开发者提供了创建、测试、调试和分享 HTTP 请求的便利性和灵活性。其主要功能包括请求构建与发送、自动化测试、团队协作与分享、实时监视与调试以及环境与变量管理。无论是个人开发者还是团队,Postman 都能有效地提…

深入了解 msvcr120.dll问题解决指南,msvcr120.dll在电脑中的重要性

在Windows操作系统中,.dll 文件扮演了非常重要的角色,它们包含许多程序运行所需的代码和数据。其中 msvcr120.dll 是一个常见的动态链接库文件,是 Microsoft Visual C Redistributable Packages 的一部分。这篇文章将探讨 msvcr120.dll 的功能…

使用Python进行并发和并行编程:提高效率的秘诀

使用Python进行并发和并行编程:提高效率的秘诀 ​ 大家好,今天我们来聊聊如何使用Python进行并发和并行编程,以提升数据处理的效率;在之前的文章中,我们探讨了Python的函数式编程和数据流处理。今天,我们将…

C++用Crow实现一个简单的Web程序,实现动态页面,向页面中输入数据并展示

Crow是一个轻量级、快速的C微框架,用于构建Web应用程序和RESTful API。 将处理前端页面的POST请求以添加数据的逻辑添加到 /submit 路由中,并添加了一个新的路由 / 用于返回包含输入框、按钮和表格的完整页面。当用户向表格添加数据时,JavaS…

SpringAOP执行流程——从源码画流程图

文章目录 了解ProxyFactory入门操作添加多个Advice的执行顺序关于异常Advice关于proceed()方法指定方法才进行增强逻辑 创建代理对象的其他方式ProxyFactoryBeanBeanNameAutoProxyCreatorDefaultAdvisorAutoProxyCreator 对SpringAOP的理解TargetSourceProxyFactory选择JDK/CJL…

【教学类-64-05】20240625彩棒鱼骨图(二)AB排列 6.5*1CM 6选2根 30种

背景需求: 【教学类-64-04】20240619彩棒鱼骨图(一)6.5*1CM 6根棒子720种-CSDN博客文章浏览阅读897次,点赞23次,收藏13次。【教学类-64-04】20240619彩棒鱼骨图(一)6.5*1CM 6根棒子720种https:…

JetBrains Rider 2024安装教程

一、下载Rider 1、进入官网,点击“下载” 2、下载完毕 二、安装Rider 1、双击下载的exe文件 2、点击“下一步” 3、可以点击“浏览”选择安装路径,之后点击“下一步” 4、选中图中四项,点击“下一步” 5、选中图中四项,点击“下…

Go语言学习:每日一练1

Go语言学习:每日一练1 目录 Go语言学习:每日一练1变量声明函数定义流程控制 ifrange遍历switch 变量声明 package main//定义变量 var a 1 const Message “hello,world”func main() {b : 2 //短变量声明var c 3c TestMethod(a, b, c)} //定义函数…

进程、CPU、MMU与PCB之间的关系

目录 进程与cpu(中央处理器) 源代码、程序、cpu与进程的关系 cpu超线程 CPU的简易架构与处理数据过程 进程与MMU(内存管理单元) mmu作用 cpu和mmu的关系 进程与PCB(进程控制块) PCB介绍与内部成员…

组合数学、圆排列、离散数学多重集合笔记

自用 如果能帮到您,那也值得高兴 知识点 离散数学经典题目 多重集合组合 补充容斥原理公式 隔板法题目 全排列题目:

Loki部署及使用

简介 loki 是云原生的日志服务,本文讲解loki的部署,日志接入和查询日志的简单使用。 理论 Loki 分两部分,Loki 是日志引擎部分,Promtail 是收集日志端。 Loki 是主服务器,负责存储日志和处理查询 。 promtail 是代理,负责收集日志并将其发送给 loki 。 promtail 是日志…

武汉星起航:全球化舞台,中国跨境电商品牌力与竞争力双提升

随着全球化步伐的加快和数字技术的迅猛发展,跨境出口电商模式已经成为中国企业海外拓展的重要战略选择。这一模式不仅为中国的中小型企业提供了进军全球市场的机会,更为它们在全球舞台上展示独特的竞争优势提供了强有力的支撑。武汉星起航将从市场拓宽、…

江协科技51单片机学习- p19 串口通信

前言: 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记,在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用: 51单片机入门教程-2…

Java Stream API揭秘:掌握List流操作,打造高效数据处理流程

序言 Java Stream API是Java 8中引入的一个非常重要的功能组成部分,它提供了一种声明式的处理数据集合的方法。它主要特点是基于函数式编程的理念,允许我们以更加简洁、高效的方式进行集合的处理、转换和过滤。通过Stream API,我们可以灵活地…

【LangChain系列——案例分析】【基于SQL+CSV的案例分析】【持续更新中】

目录 前言一、LangChain介绍二、在SQL问答时如何更好的提示?2-1、安装2-2、SQLite 样例数据2-3、使用langchain与其进行交互2-4、查看模型提示语2-5、提供表定义和示例行2-6、将表信息插入到Prompt中去2-7、添加自然语言->SQL示例2-8、在向量数据库中查找最相关的…

JAVA开发的一套医院绩效考核系统源码:KPI关键绩效指标的清晰归纳

KPI是关键绩效指标(Key Performance Indicators)的缩写,它是一种用于衡量员工或组织绩效的量化指标。这些指标通常与组织的目标和战略相关,并帮助管理层评估员工和组织的实际表现。KPI还可以为员工提供清晰的方向,使他…

办公软件汇总

1、OCR 1.1 pearOCR pearOCR 是一个免费的免费在线文字提取OCR工具网站。PearOCR界面简洁,所有过程均在网页端完成,无需下载任何软件,点开即用。官方地址:https://pearocr.com/ 参考:9款文字识别(OCR)工具…