首页 > 编程语言 >Java入门14——动态绑定(含多态)

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

时间:2024-11-07 22:43:58浏览次数:3  
标签:Java name fish Animal0 age 多态 String public 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);
    }

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

    @Override
    public 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类的对象,这就是我们的多态


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

标签:Java,name,fish,Animal0,age,多态,String,public,14
From: https://blog.csdn.net/2302_81032013/article/details/143576569

相关文章

  • JavaFx项目打包
    JavaFx项目打包成exe可执行程序使用Java8以上的版本编写JavaFx项目的时候,需要额外下载JavaFx并且配置环境,那么打包的时候也需要进行对应的配置。网上很多方法都打包不成功,所以这里记录一下我成功打包的过程。步骤一:在IDEA上打包成jar包打包jar包打开File>ProjectStru......
  • java-web-web后端知识小结
    spring框架三大核心:      IOC--控制反转      DI---依赖注入      AOP--面向切面编程web开发技术小结      1.过滤器,JWT令牌      2.三层架构             IOC,DI             AOP,全局异常处理,......
  • [luoguP1456] Monkey King
    题意给出\(n\)个集合\(S_1\cdotsS_n\),\(S_i=\{a_i\}\),每次给出\(x,y\),将第\(x\)和第\(y\)个元素所在的集合的最大值\(\div2\),合并两个集合,然后输出新集合的最大值。sol每次求出两个集合,记录两个集合的最大值并删除,将两个集合与两个最大值除以\(2\)后合并即可。......
  • 基于Java+SpringBoot心理测评心理测试系统功能实现五
    一、前言介绍:1.1项目摘要心理测评和心理测试系统在当代社会中扮演着越来越重要的角色。随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态、诊断心理问题、制定心理治疗方案的工具,其需求和应用范围不断扩大。首先,现代社会节奏快速,竞争激烈,人们面临着来......
  • 基于Java+SpringBoot心理测评心理测试系统功能实现六
    一、前言介绍:1.1项目摘要心理测评和心理测试系统在当代社会中扮演着越来越重要的角色。随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态、诊断心理问题、制定心理治疗方案的工具,其需求和应用范围不断扩大。首先,现代社会节奏快速,竞争激烈,人们面临着来......
  • Oracle OCP认证考试考点详解082系列14
    题记:本系列主要讲解OracleOCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。66.第66题:题目解析及答案:关于撤销(UNDO)和撤销表空间(UNDOTABLESPACE),以下哪两个陈述是正确的?A.一个撤销表空间可能仅由一个实例所拥有。B.撤销段由SYSBACKUP所拥有。C.撤销段由......
  • Java - 27 final
    Java-27final可以修饰类、属性、方法和局部变量使用场景不希望类被继承不希望父类的某个方法被子类重写不希望类的某个属性被修改(常量)classA{publicfinaldoubleTAX_RATE=0.08;}不希望局部变量被修改(局部常量)细节final修饰的属性在定义时必须赋......
  • Java - 28 内部类
    Java-内部类一个类的内部又完整地嵌套了另一个类结构,被嵌套的内为内部类内部类-外部类-外部其他类类的五大成员:属性;方法;构造器;代码块;内部类classOuter{classInner{}}定义在外部类局部位置上(通常在方法/代码块中)局部内部类(有类名)本质还是一......
  • Java - 27 抽象类 + 接口
    Java抽象类+接口抽象类当父类的某些方法需要声明,但又不确定如何实现时(父类方法不确定性问题),可以将其声明为抽象方法,这个类就是抽象类publicabstractclassAnimal{abstractpublicvoideat();//抽象方法没有方法体}一般来说,抽象类会被继承,由其子类具体实现细节......
  • PowerShell 脚本(.ps1)、批处理文件(.bat)、VBScript(.vbs) 和 旧版 JavaScript(.js) 都可以在
    PowerShell脚本(.ps1)、批处理文件(.bat)、VBScript(.vbs)和旧版JavaScript(.js)都可以在Windows系统中运行,但它们的兼容性和支持范围有一定的差异,尤其是在不同的Windows版本上。下面是它们在Windows系统中支持的情况:1. PowerShell脚本(.ps1)兼容性: PowerShell是自Window......