题意整理

  • 给定一个Base类,以及它的两个子类Sub1和Sub2。
  • 要求定义一个方法,传入Base类型的实例,返回其对应的简单类名。

方法一(调用instanceof)

1.解题思路

  • 通过instanceof判断对应的类型,然后将对应类型的简单类名返回。

图解展示: alt

2.代码实现

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

        //如果是Sub1的实例,则返回"Sub1"
        if(obj instanceof Sub1){
            return "Sub1";
        }
        //如果是Sub2的实例,则返回"Sub2"
        else if(obj instanceof Sub2){
            return "Sub2";
        }
        //如果都不是,则返回"Base"
        else{
            return "Base";
        }

    }

}

class Base {

}

class Sub1 extends Base {

}

class Sub2 extends Base {

}

3.复杂度分析

  • 时间复杂度:只需调用一次逻辑判断,所以时间复杂度为O(1)O(1)
  • 空间复杂度:不需要额外的空间,所以空间复杂度为O(1)O(1)