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,一经查实,立即删除!

相关文章

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

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

Android系统主动修改鼠标样式

将鼠标移到到Button上,鼠标样式由箭头变成小手,pointerType1000是箭头,pointerType1002是鼠标小手 frameworks/base/core/java/android/view/ViewRootImpl.java processPointerEventmaybeUpdatePointerIcon(event);if (event.getActionMaske…

快速搭建redis集群

快速搭建redis集群 文章目录 快速搭建redis集群一、说明二、安装redis三、快速启动单机redis四、搭建三节点redis集群(三主):全部节点都可以用,集群才可用五、搭建三节点redis集群(三主):一半以…

【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的函数式编程和数据流处理。今天,我们将…

查询SQL 人大金仓 与MySQL的区别

查询SQL 人大金仓 与MySQL的区别&#xff0c;以若依为例 最常见 时间范围 1.人大金仓 Kingbase <select id"selectUserListByOrgIds" parameterType"SysUser" resultMap"SysUserResult">select u.user_id, u.dept_id, u.nick_name,u.tj_…

力扣2748.美丽下标对的数目

力扣2748.美丽下标对的数目 朴素思路 二重循环模拟 class Solution {public:int gcd(int a,int b){return b ? gcd(b,a%b):a;}int countBeautifulPairs(vector<int>& nums) {int res0;for(int i0;i<nums.size() - 1;i)for(int ji1;j<nums.size();j){strin…

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

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

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

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

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

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

JetBrains Rider 2024安装教程

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

Go语言学习:每日一练1

Go语言学习&#xff1a;每日一练1 目录 Go语言学习&#xff1a;每日一练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&#xff08;中央处理器&#xff09; 源代码、程序、cpu与进程的关系 cpu超线程 CPU的简易架构与处理数据过程 进程与MMU&#xff08;内存管理单元&#xff09; mmu作用 cpu和mmu的关系 进程与PCB&#xff08;进程控制块&#xff09; PCB介绍与内部成员…

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

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

解决pip 无法使用

pip is configured with locations that require TLS/SSL,the ssl module in Python is not available python缺少SSL模块&#xff0c;pip默认安装源为https://pypi.org/simple/&#xff0c;连接是需要SSL库&#xff0c;写配置文件修改为阿里安装源。 pip config --global se…

Loki部署及使用

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

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

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