代码如下:public class InterfaceTest {  public User Haha() {
    User dd = new UserInfo();
    return dd;
  }  public static void main(String[] args) {
    InterfaceTest ff = new InterfaceTest();
    System.out.print(ff.Haha().getUserID());
  }
}class UserInfo implements User {  public long getUserID() {
    return 1;
  }  public boolean isGuest() {
    return false;
  }
}interface User {  public long getUserID();  public boolean isGuest();}User 是个接口 我这样就是User dd = new UserInfo(); 生成个User的实例,那我这样UserInfo dd = new UserInfo();  和刚刚那样有什么去区别呢?

解决方案 »

  1.   

    完全可以,User dd = new UserInfo(); 应该是向上转型,我感觉UserInfo dd = new UserInfo();  这样写更好些
      

  2.   

    楼上的讲反了
    一般都认为User dd = new UserInfo(); 更好些,
    提得多的是List list = new ArrayList()比ArrayList list = new ArrayList()更好
    两个一样的。举个例子,有一个类,A,有构造函数A(User user),那么,你在实际应用中,既可以是A(new UserInfo()),也可以是A(new AnotherSubClass()),(AnotherSubClass也是User的子类),可以看出以接口名为参数类型的构造函数可以接受更多的具体子类,而不仅仅局限于某子类面向接口编程
      

  3.   

    User dd = new UserInfo(); 
    接口一样,但是代码实现不同。这就是多态的体现。这样写比较好,易于代码重用。
      

  4.   

    你既然定义了User接口,就是想用统一的接口来调不同的对象嘛。
    如:User dd = new UserInfo(); 
    这样当然也可以UserInfo dd = new UserInfo(); 但如果你又有一个类实现了User接口,如class OtherInfo implements User
    在InterfaceTest 的Haha方法就可以用统一的接口User返回不同的对象,对外封装了。