题解 | #定义打印方法#
定义打印方法
http://www.nowcoder.com/practice/50b50ae39d65415a9fd70601d711e5af
多态性,是子类的对象赋给了父类的引用,使用的前提是有继承关系、有方法的重写, 本题中的三个类都重写了toString()方法那么很显然,需要找到一个类,是本题中三个类的共同父类,又有toString()方法,并且有forName()方法和newInstance()方法,以便在第10行的print()中能传入一个对象,那么去哪里找这样的类呢?
不用想了,平时就是用 Object类,它是所有类的父类,又拥有各种各样的方法
- 找到该类以后,把这个类的对象 Object obj 作为参数传给 print(),也就是 “父类的引用”,
- 这样,在 Class.forName(className).newInstance() 时,就会帮助创建出 “子类的对象”
从而实现 “父类的引用指向子类的对象”,即多态性
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();
// print就是需要你定义的方法
print(Class.forName(className).newInstance());
}
}
// write your code here......
// 多态性,是子类的对象赋给了父类的引用,使用的前提是有继承关系、有方法的重写
// 本题中的三个类都重写了toString()方法
// 那么很显然,需要找到一个类,是本题中三个类的共同父类,又有toString()方法
// 并且有forName()方法和newInstance()方法,以便在第10行的print()中能传入一个对象
// 不用想了,平时就是用 Object类,它是所有类的父类,又拥有各种各样的方法
// 找到该类以后,把这个类的对象作为参数传给print(),也就是“父类的引用”,
// 并且在方法体中应用上三个子类都重写了的方法来实现需求
// 这样,在Class.forName(className).newInstance()时,
// 就会帮助创建出“子类的对象”
//
// 从而实现“父类的引用指向子类的对象”,即多态性
public static void print(Object obj) {
System.out.print(obj.toString());
}
}
class First {
public String toString() {
return "First";
}
}
class Second {
public String toString() {
return "Second";
}
}
class Third {
public String toString() {
return "Third";
}
}