通过instanceof运算符判断obj是否属于右边类所创建对象,instanceof是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回值为boolean类型。若返回结果为true,若是则调用调用Object的getClass()方法获得Class对象,之后用getSimpleName()方法来获取这个类的名称(此环境下使用getName()方法也可以获得正确结果,但在常规情况下,使用getName()会返回包括包名在内的实体名称,这里需要注意),本题的代码参考写法如下:

if (obj instanceof Sub1) {
    Sub1 sub1 = (Sub1) obj;
    return sub1.getClass().getSimpleName();
} else if (obj instanceof Sub2) {
    Sub2 sub2 = (Sub2) obj;
    return sub2.getClass().getSimpleName();
} else {
    return obj.getClass().getSimpleName();
}

附上完整代码:

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) {

        //write your code here......
if (obj instanceof Sub1) {
    Sub1 sub1 = (Sub1) obj;
    return sub1.getClass().getSimpleName();
} else if (obj instanceof Sub2) {
    Sub2 sub2 = (Sub2) obj;
    return sub2.getClass().getSimpleName();
} else {
    return obj.getClass().getSimpleName();
}

    }

}

class Base {

}

class Sub1 extends Base {

}

class Sub2 extends Base {

}