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

阅读 216

2022-10-23

做比较多的服务端接口测试后,如果是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多态中的向上转型和向下转型_测试开发

精彩评论(0)

0 0 举报