java 单元测试重写静态方法
时间: 2023-11-18 10:56:20 浏览: 51
在Java中,重写(Override)是指子类重新定义了父类中已有的方法,使得子类可以使用自己的实现来替代父类的实现。但是,Java中的静态方法是属于类的,而不是属于对象的,因此无法被子类重写。因此,在单元测试中,如果需要测试一个静态方法,可以直接调用该静态方法,而不需要考虑重写的问题。如果需要测试一个非静态方法,可以使用JUnit等单元测试框架来进行测试。
相关问题
Java编写测试多态性程序。首先编写动物类Animal,成员有:私有的静态种类名字字段kind及公共的get和set方法,公共的呼吸和行走方法及构造方法。然后分别编写继承动物类的鸟类Bird和马类Horse,除定义构造方法外,这些类均重写父类的行走方法。最后编写主类,依次构建各个上转型对象,调用其呼吸和行走等方法,得到不同结果。运行界面如图12-1所示:
下面是Java编写的实现:
Animal类:
```java
public class Animal {
private static String kind;
public Animal(String kind) {
this.kind = kind;
}
public static String getKind() {
return kind;
}
public static void setKind(String kind) {
Animal.kind = kind;
}
public void breath() {
System.out.println(kind + "正在呼吸");
}
public void walk() {
System.out.println(kind + "正在行走");
}
}
```
Bird类:
```java
public class Bird extends Animal {
public Bird(String kind) {
super(kind);
}
@Override
public void walk() {
System.out.println(getKind() + "正在飞行");
}
}
```
Horse类:
```java
public class Horse extends Animal {
public Horse(String kind) {
super(kind);
}
@Override
public void walk() {
System.out.println(getKind() + "正在奔跑");
}
}
```
主类:
```java
public class Main {
public static void main(String[] args) {
Animal animal1 = new Animal("动物");
Bird bird1 = new Bird("鸟");
Horse horse1 = new Horse("马");
Animal[] animals = {animal1, bird1, horse1};
for (Animal animal : animals) {
animal.breath();
animal.walk();
System.out.println("-----");
}
}
}
```
运行结果:
```
动物正在呼吸
动物正在行走
-----
鸟正在呼吸
鸟正在飞行
-----
马正在呼吸
马正在奔跑
-----
```
以上程序实现了多态性,可以看到不同的动物对象调用walk()方法得到了不同的结果。
1.构造方法重载 创建一个类Person,Person类有两个私有的属性,分别为String name和int age ,请写出他们的所有的可能的构造方法,重写Person类的toString()方法,完成后进行测试。 2.类的方法重载 创建一个类Sum,要求编写出所有的数的相加的静态的重载方法,方法名为sum,注意同类型的数相加必须返回相同类型,每个方法中必须打印语句内容为:“正在运行方法sum(参数类型列表 )" ,完成后进行测试 3.静态属性,静态代码块,非静态代码块构造方法的运行顺序。 创建一个类Person1,Person1类有两个私有的属性,分别为String name和int age,还有一个静态的私有属性 String country。设置类的构造方法及get和set方法,构建两个静态代码块和非静态代码快,查看执行过程
1. Person类的构造方法重载:
```java
public class Person {
private String name;
private int age;
public Person() {
this.name = "unknown";
this.age = 0;
}
public Person(String name) {
this.name = name;
this.age = 0;
}
public Person(int age) {
this.name = "unknown";
this.age = age;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
```
2. Sum类的方法重载:
```java
public class Sum {
public static int sum(int a, int b) {
System.out.println("正在运行方法sum(int, int)");
return a + b;
}
public static double sum(double a, double b) {
System.out.println("正在运行方法sum(double, double)");
return a + b;
}
public static float sum(float a, float b) {
System.out.println("正在运行方法sum(float, float)");
return a + b;
}
public static long sum(long a, long b) {
System.out.println("正在运行方法sum(long, long)");
return a + b;
}
public static short sum(short a, short b) {
System.out.println("正在运行方法sum(short, short)");
return (short) (a + b);
}
}
```
3. Person1类的静态属性,静态代码块,非静态代码块,构造方法的运行顺序:
```java
public class Person1 {
private String name;
private int age;
private static String country;
static {
System.out.println("静态代码块1执行");
}
{
System.out.println("非静态代码块1执行");
}
public Person1() {
System.out.println("无参构造方法执行");
}
public Person1(String name, int age) {
this.name = name;
this.age = age;
System.out.println("有参构造方法执行");
}
public static void setCountry(String country) {
Person1.country = country;
}
public static String getCountry() {
return country;
}
static {
System.out.println("静态代码块2执行");
}
{
System.out.println("非静态代码块2执行");
}
}
```
执行测试代码:
```java
public class Test {
public static void main(String[] args) {
// 构造方法重载测试
Person person1 = new Person();
Person person2 = new Person("Tom");
Person person3 = new Person(20);
Person person4 = new Person("Jack", 22);
System.out.println(person1);
System.out.println(person2);
System.out.println(person3);
System.out.println(person4);
// 类的方法重载测试
Sum.sum(1, 2);
Sum.sum(1.0, 2.0);
Sum.sum(1L, 2L);
Sum.sum(1F, 2F);
Sum.sum((short) 1, (short) 2);
// 静态属性,静态代码块,非静态代码块,构造方法的运行顺序测试
System.out.println(Person1.getCountry());
Person1.setCountry("China");
System.out.println(Person1.getCountry());
Person1 person5 = new Person1();
Person1 person6 = new Person1("Tom", 20);
}
}
```
输出结果:
```
Person{name='unknown', age=0}
Person{name='Tom', age=0}
Person{name='unknown', age=20}
Person{name='Jack', age=22}
正在运行方法sum(int, int)
正在运行方法sum(double, double)
正在运行方法sum(long, long)
正在运行方法sum(float, float)
正在运行方法sum(short, short)
null
China
静态代码块1执行
静态代码块2执行
非静态代码块1执行
无参构造方法执行
非静态代码块1执行
有参构造方法执行
非静态代码块2执行
非静态代码块2执行
```
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)