题目的主要信息:

  • 父类Base有两个子类:Sub1、Sub2
  • 请补全方法getClassName(),要求传入Base类型的实例,在方法内部判定其具体的类型,返回的是类型的简单名字(不含包名)

具体做法:

这道题要求的是方法中返回实例的具体类型,传入的是一个实例,我们对这个实例调用getClass().getName()即可,直接返回,没什么好说的。

alt

import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String className = scanner.next();
            Base obj = (Base) Class.forName(className).newInstance();
            System.out.println(getClassName(obj));
        }
    }

    public static String getClassName(Base obj) {
        return obj.getClass().getName(); //直接返回
    }

}

class Base {

}

class Sub1 extends Base {

}

class Sub2 extends Base {

}

复杂度分析:

  • 时间复杂度:O(1)O(1)O(1),直接返回,常数时间
  • 空间复杂度:O(1)O(1)O(1),无额外空间