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{

     @Override
     public void run() {
         System.out.println("学生大步跑...");
     }
}
public class Teacher extends Person{

     @Override
     public 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{

     @Override
     public void eat() {
         System.out.println("猫吃鱼...");
     }

 }
public class Dog extends Animal{

     @Override
     public 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{

     @Override
     public void fly() {
         System.out.println("鸟靠翅膀飞...");
     }

 }
public class Plane implements MyInter{

     @Override
     public 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{

     @Override
     public void eat() {
         System.out.println("猫吃鱼...");
    }

}
public class Dog extends Animal{

     @Override
     public 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{

     @Override
     public void eat() {
         System.out.println("猫吃鱼...");
     }

 }
public class Dog extends Animal{

     @Override
     public 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{

     @Override
     public 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{

     @Override
     public void eat() {
     System.out.println("猫吃鱼...");
     }

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

}
public class Dog extends Animal{

     @Override
     public 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了家人们明天见

        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何轻松获取 GitLab 指定分支特定路径下的文件夹内容

第一步: 获取 accessToken 及你的 项目 id : 获取 accessToken ,点击用户头像进入setting 按图示操作,第 3 步 填写你发起请求的域名。 获取项目 id , 简单粗暴方案 进入 你项目仓库页面后 直接 源码搜索 project_id, value 就…

基于 elementUI / elementUI plus,实现 主要色(主题色)的一件换色(换肤)

一、效果图 二、方法 改变elementUI 的主要色 --el-color-primary 为自己选择的颜色,核心代码如下: // 处理主题样式 export function handleThemeStyle(theme) {document.documentElement.style.setProperty(--el-color-primary, theme) } 三、全部代…

Fragment与ViewModel(MVVM架构)

简介 在Android应用开发中,Fragment和ViewModel是两个非常重要的概念,它们分别属于架构组件库的一部分,旨在帮助开发者构建更加模块化、健壮且易维护的应用。 Fragment Fragment是Android系统提供的一种可重用的UI组件,它能够作为…

nacos在k8s上的集群安装实践

目录 概述实践nfs安装使用 k8s持久化nacos安装创建角色部署数据库执行数据库初始化语句部署nacos ingress效果展示 结束 概述 本文主要对 nacos 在k8s上的集群安装 进行说明与实践。主要版本信息,k8s: 1.27.x,nacos: 2.0.3。运行环境为 centos 7.x。 实…

centos 使用证书验证拉取gitee代码 配置

简单记录下过程 按官方网站提示即可 cd ~/.ssh/ #如果没有证书 生成一个 ssh-keygen -t rsa[root萨法是的 .ssh]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):▽ Enter passphrase (empty for …

logstash配置文件中明文密码加密

1 案例背景 应用配置文件中禁止使用明文密码,需要加密处理 上图中,红框打码位置为es的明文密码,需要对其进行处理 2 创健keystore文件 /rpa/logstash/bin/logstash-keystore --path.settings /rpa/isa/conf/logstash/ create 注&#xff1…

2024全网最全面及最新且最为详细的网络安全技巧四 之 sql注入以及mysql绕过技巧 (2)———— 作者:LJS

目录 4.5 DNS记录类型介绍(A记录、MX记录、NS记录等,TXT,CNAME,PTR) 4.5.1 DNS 4.5.2 A记录 4.5.3NS记录 4.5.4 MX记录 4.5.5 CNAME记录 4.5.6 TXT记录 4.5.7 泛域名与泛解析 4.5.8域名绑定 4.5.9 域名转向 4.6 Mysql报错注入之floor报错详解…

Okhttp响应Json数据

简介 OkHttp是一个高效、现代的HTTP客户端库,专为Android和Java应用程序设计,用于发送网络请求和处理响应。它支持HTTP/2和SPDY协议,允许连接复用,减少延迟,提高网络效率。OkHttp还处理了常见的网络问题,如…

【目标检测】Yolov8 完整教程 | 检测 | 计算机视觉

学习资源:https://www.youtube.com/watch?vZ-65nqxUdl4 努力的小巴掌 记录计算机视觉学习道路上的所思所得。 1、准备图片images 收集数据网站:OPEN IMAGES 2、准备标签labels 网站:CVAT 有点是:支持直接导出yolo格式的标…

Flutter实现页面间传参

带参跳转 步骤 在router中配置这个路由需要携带的参数,这里的参数是 arguments,注意要用花括号包裹参数名称 在相应组件中实现带参构造函数 在state类中可以直接使用${widget.arguments}来访问到传递的参数 在其他页面中使用Navigator.pushNamed()带参跳转

ansible自动化运维,(2)ansible-playbook

三种常见的数据格式: XML:可扩展标记语言,用于数据交换和配置 JSON:对象标记法,主要用来数据交换或配置,不支持注释 YAML:不是一种标记语言,主要用来配置,大小写敏感&…

BUG cn.bing.com 重定向的次数过多,无法搜索内容

BUG cn.bing.com 重定向的次数过多,无法搜索内容 环境 windows 11 edge浏览器详情 使用Microsoft Edge 必应搜索显示"cn.bing.com"重定向次数过多,无法进行正常的检索功能 解决办法 检查是否开启某些科_学_上_网(翻_墙&#xf…

电脑高手推荐:三款超实用软件,让你的电脑如虎添翼!

7Zip 7-Zip是一款免费且开源的文件压缩工具,支持多种文件格式,包括其自带的7z格式、ZIP、GZIP、BZIP2和TAR等。该软件由Igor Pavlov于1999年开发,具有高压缩比的特点。7-Zip不仅可以在Windows操作系统上使用,还可以在Unix-like的操…

做到这九点,工作就无后顾之忧

大家好,今天又跟大家分享一篇,怎么在职场上做到挺起腰杆做事。全文共分9点,尤其最后一点最为重要。篇幅有点长,全文共计三千多字,请耐心看完。 如果您觉得对您有些帮助,点赞收藏关注。谢谢您的支持。 在职场…

LDO芯片手册,实例应用分析

在进行电路设计时LDO是经常用到的,尤其在为芯片,晶振等敏感电路进行供电时应用更多,下面选取一款比较常用的LDO芯片,一起进行更深入的学习。 SGM2036特点简介 SGM2036,圣邦微一款比较常用的LDO芯片手册 可以先大致看…

广州数据中心机房搬迁验收要求

1.验收要求 新机房装修工程全部竣工,各类环境设备安装到位,包括空调、UPS、柴油发电机等设备安装调试完毕,机房接地、防雷、消防系统检验合格,机房综合布线工作完成,机房各项环境指标达标,机房整体通过验收…

MySQL连接

MySQL工具包 MySQL实现简单链接 一 引入工具包 JBDCUtils,无需更改,直接使用即可。 import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties;public class JDBCUtil {private static String URL;p…

mapstruct实现各个实体间的类型转换(DTO转BO、BO转Entity)的实践

一、引入 在没有遇见mapstruct的时候,实现各个实体之间的转换,都是手动转换实现的,属性少一带你还好,当属性一多,代码就会变得很冗余,没必要的非逻辑的代码就会加多。。。。 比如: public cl…

Python+Pytest+Yaml+Request+Allure+GitLab+Jenkins接口自动化测试框架概解

PythonPytestYamlAllure整体框架目录(源代码请等下篇) 框架详解 common:公共方法包 –get_path.py:获取文件路径方法 –logger_util.py:输出日志方法 –parameters_until.py:传参方式方法封装 –requests_util.py:请求方式方法封…

洗地机怎么选择最好?四大洗地机精选放心入手

在当今生活节奏飞快的社会中,人们越来越渴望拥有一款高性能、实用方便的家用洗地机,能够帮助我们节省大量的清洁时间。因为洗地机它是吸尘器的升级版,清洁力比扫地机器人更强,洗地机通过高速旋转的风机,产生超大吸力&a…