当前位置: 首页 > news >正文

Java入门14——动态绑定(含多态)

大家好,我们今天来学动态绑定和多态,话不多说,开始正题~


但是要学动态绑定之前,我们要学习一下向上转型,方便后续更好地理解~

一、向上转型

1.什么是向上转型

网上概念有很多,但其实通俗来讲,向上转型就是把一个子类转换成父类

2.代码演示+讲解

这次我们依然以动物为例做演示~首先我们写一个父类Animal0,代码如下:

public class Animal0 {public String name;public int age;public Animal0(String name, int age) {this.name = name;this.age = age;}
}

这个父类里面,有名字和年龄,我们再来写一个子类 fish :

public class fish extends Animal0{public fish(String name, int age) {super(name, age);}
}

子类也有了,那我们接下来就再创建一个测试类test吧~

在test类里面有非常关键的一步,就是向上转型!先给大家看一下代码:

public class test {public static void main(String[] args) {Animal0 animal0 = new fish("sfish",2);System.out.println(animal0.name);System.out.println(animal0.age);}
}

 这个被红色框框框起来的就可以称作向上转型,我们发现Animal0的类可以new它的子类fish,之后我们再次调用就可以直接 父类.成员变量名,就可以引用了

我们来看一下运行结果:

有了向上转型的基础,接下来,我们就可以学动态绑定了~

二、动态绑定

如果我们现在有父类Animal0,子类fish和子类monkey,我们知道,不管是哪种动物,它们都会吃,所以我们在父类写一个吃的方法~

代码如下:

public class Animal0 {public String name;public int age;public Animal0(String name, int age) {this.name = name;this.age = age;}public void eat() {System.out.println("eat");}
}

但是我们知道,鱼吃鱼食,猴子吃猴子的食物,吃的不一样,所以我们要在子类里面重写父类的方法~

那么fish类的代码和monkey类的代码如下:

public class fish extends Animal0{public fish(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("fish eat");}
}
public class monkey extends Animal0{public monkey(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("monkey eat");}
}

那么我们如何调用这个具体的方法呢?这个时候我们来写一下test类~

public class test {public static void main(String[] args) {Animal0 animal0 = new fish("sfish",2);System.out.println(animal0.name);System.out.println(animal0.age);animal0.eat();Animal0 animal1 = new monkey("smonkey",3);System.out.println(animal1.name);System.out.println(animal1.age);animal1.eat();}
}

这个时候,父类引用了子类的对象,我们就可以实现 eat 的具体方法啦~

运行结果如下:

 这就是我们的动态绑定~

三、多态

如果一个功能可以调用多种状态就很方便,所以我们来看看多态

这里除了test类不同之外,其它是一样的,我们来看看test类的代码~

public class test {public static void eatfunc(Animal0 animal0){animal0.eat();}public static void main(String[] args) {fish sfish = new fish("sfish",2);monkey smonkey = new monkey("smonkey",3);eatfunc(sfish);eatfunc(smonkey);}
}

这里我们定义了一个eatfunc的方法,传一个Animal0类的参数,然后在调用的时候我们调用了fish类和monkey类的对象,这就是我们的多态


这就是我们今天的内容,大家加油鸭! 


http://www.mrgr.cn/news/68124.html

相关文章:

  • C# String系列(3):StringBuilder有诸多优势,它能代替String吗?
  • 信息安全工程师(80)网络安全测评技术与工具
  • YOLOv11融合IncepitonNeXt[CVPR2024]及相关改进思路
  • STM32学习之I2C的简介与学习
  • 蓝牙 SPP 协议详解及 Android 实现
  • 基于STM32的贪吃蛇游戏教学
  • 在JS中, 0 == [0] 吗
  • 【Golang】区块链练习(一)
  • 西门子KTP系列HMI用户自定义弹窗-多弹窗共用
  • Linux学习笔记之时间日期和查找和解压缩指令
  • RocketMQ 自动注入消费者
  • python-23-一篇文章帮你理解Python推导式
  • 【大模型】通过Crew AI 公司的崛起之路学习 AI Agents 的用法
  • 加入鲲鹏社区,领取精美礼品!
  • uniapp组件实现省市区三级联动选择
  • 用uio正确映射读写内存mmap
  • 如何在 Java 中使用 Canal 同步 MySQL 数据到 Redis
  • 数据结构——快速排序
  • 带你用Go实现二维码小游戏(下)
  • 一文了解git TAG