首页 > 编程语言 >【Java】再说下Java多态中的向上转型和向下转型

【Java】再说下Java多态中的向上转型和向下转型

时间:2022-10-23 21:31:35浏览次数:55  
标签:调用 Java name 子类 转型 多态 父类 public String

做比较多的服务端接口测试后,如果是http接口,使用jmeter、postman工具来测试都是比较方便的。如果是RPC接口,使用以上的工具就会比较吃力了。如果你对Java语言比较熟悉,建议可以使用junit来进行业务场景的接口自动化测试。

  Java的三大特性,封装、继承和多态。之前讲的封装和继承比较多,对多态说的不多。为什么要用到封装,因为在写接口自动化用例时,会有很多重复的调用。比如数据的创建,很多接口调用的数据很有可能都是一套,如果每次都是自己写一套,代码会非常复杂,如果业务逻辑进行了变化,维护用例也会很费劲。继承用到的不多,大部分都是方法的封装调用。

  今天再说下多态的使用。不多说,上代码:

  我来说个场景: 

  1.父类中有成员方法 method

  2.子类中也有成员方法 method

  3.父类中有成员变量 age

  4.子类中有成员变量 age

  我们在调用的过程中会如何选择呢?

  父类中:

package com.liepin.rim.org.day01.test03;


//尝试下成员方法/成员变量的调用

public class Fu {

    public int age = 10;

    private String name;

    public void method(){

        System.out.println("父类的方法");

    }


    public String getName() {

        name = "父类的" + name;

        return name;

    }


    public void setName(String name) {

        this.name = name;

    }

}

子类中:

package com.liepin.rim.org.day01.test03;


public class Zi extends Fu{

    public int age = 20;

    private String name;

    public void method(){

        System.out.println("子类的方法");

    }


    @Override

    public String getName() {

        name = "子类的" + name;

        return name;

    }


    @Override

    public void setName(String name) {

        this.name = name;

    }

}


Test类描述:

package com.liepin.rim.org.day01.test03;


public class Test {

    public static void main(String[] args){

        Fu fu = new Zi();

        //调用父类和子类都有的method方法(成员方法),根据多态打印子类的方法(优先子类对象的方法)

        fu.method();

        //调用成员变量,父类和子类都有,显示父类的

        System.out.println("年龄为 " + fu.age); //成员变量显示的是父类的

        //如果想调用子类中的成员变量

        fu.setName("Hello");

        System.out.println(fu.getName()); //调用子类的名称



    }

}


我们在运行Test类后,查看运行结果:


子类的方法

年龄为 10

子类的Hello


可以看到Java多态中的成员方法,使用的是new 子类,也就是子类对象。

对于成员变量,向上转型,显示的父类的age调用,也就是10


这块之前不是很理解,也不是太了解其中的逻辑,尤其是成员方法,使用Ctrl+方法明明定位到父类的方法,但是结果却是子类的。

现在大家应该明白一些了

【Java】再说下Java多态中的向上转型和向下转型_测试开发

标签:调用,Java,name,子类,转型,多态,父类,public,String
From: https://blog.51cto.com/u_11894/5787611

相关文章

  • Java关键字(五)——this
    this也是Java中的一个关键字,在《Java编程思想》第四版第五章5.4小节对this关键字是这样介绍的:this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引......
  • 项目选java8报错 -- 警告: 源发行版 11 需要目标发行版 11 -- 解决方法
    项目创建时默认是JDK11,选JDK8作为SDK,运行时报错,提示“警告:源发行版11需要目标发行版11”,解决方法:点击菜单File-->Settings-->Build,...-->Compiler-->Jav......
  • 【Java复健指南07】OOP中级02-重写与多态思想
    前情提要:https://www.cnblogs.com/DAYceng/category/2227185.html重写注意事项和使用细节方法重写也叫方法覆法,需要满足下面的条件1.子类的方法的参数,方法名称,要和父......
  • 多态的基础知识
    多态:基本介绍一个引用变量可以引用多种实际类型对象的现象称为多态。一个引用变量可以引用这个类和该类的所有子类对象。父类引用变量引用子类对象规则:沿着继承层......
  • java.lang.ClassNotFoundException: org.apache.ibatis.io.Resources
    不知道为什么会出现mybatis包无法加载的问题解决方案:File->ProjectStructure  然后Apply->OK就不会出现刚刚的错误了......
  • Javassist
    前言动态编程这个概念是相对于静态编程而言的,两者的区别简而言之,在静态编程中,类型检查是在编译时完成的,而动态编程中类型检查是在运行时完成的。所谓动态编程就是绕过编译......
  • java_day17~18
    Java基础JavaIO流什么是流?​ 内存与存储设备之间传输数据的通道流的分类按方向分类输入流:将设备中的内容读入到内存中输出流:将内存中的内容写入到设备中按单......
  • Java生成验证码图片
    生成验证码/***验证码工具类**@name:VerificationCode*@author:terwer*@date:2022-07-1722:21**/publicclassVerificationCode{privatesta......
  • javadoc 文档
    javadoc帮助文档书写publicclassJavaDoc{ /** *@authorxiaowen *@paramargs *@since1.0 *@throwsnull */publicstaticvoidmain(String[]args){ S......
  • JavaScript语法-算数、比较运算符、逻辑运算符
    JavaScript语法-算数运算符<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>算符运算符</title><script><!--变量3-->......