import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { //输入要实例化的类名:Base、Sub1、Sub2 三者之一 String className = scanner.next(); Base obj = (Base) Class.forName( className).newInstance();//得到输入的classNmae,并用newInstance获得这个类的实例对象,在jdk9以后可以用(Base) Class.forName(className).getDeclaredConstructor().newInstance(); System.out.println(getClassName(obj)); } } public static String getClassName(Base obj) { //第一种方法: // //看下面的类可知呢,Base是sub1和sub2的祖类,故这里的形参的类型用Base // if(obj.getClass()==Base.class){ // return "Base"; // } // else if(obj.getClass()== Sub1.class){ // return "Sub1"; // } // return "Sub2"; // } //第二种方法: //看下面的类可知呢,Base是sub1和sub2的祖类,故这里的形参的类型用Base //这个方法有一个判断:因为Base是Sub1和Sub2的父类,所以第一个判断不能是obj instanceof Base // if(obj instanceof Base){ // return "Base"; // } //不可以这样哈 if(obj instanceof Sub2){ return "Sub2"; } else if(obj instanceof Sub1){ return "Sub1"; } return "Base"; } } class Base { } class Sub1 extends Base { } class Sub2 extends Base { }