题解 | #定义打印方法#

定义打印方法

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";
    }
}
全部评论

相关推荐

评论
64
2
分享

创作者周榜

更多
牛客网
牛客企业服务