使用Interface创建新的Object对象

时间:2013-12-04 15:08:16

标签: c# java oop interface

我有一个界面和一个班级。

public interface IUser{
    public String getFirstname();
    public String getLastname();
}

public class User implements Iuser{
    String firstname;
    String lastname;

    public User(String firstname, String lastname)
    {
        this.firstname = firstname;
        this.lastname = lastname;
    }

    public String getFirstname(){
        return firstname;
    }

    public String getLastname(){
        return lastname;
    }
}

当我通常需要创建User的实例时,我会这样做:

User user = new User("Mike", "L");

但我对在互联网上找到的文章感到困惑,因为他们正在创建一个像这样的用户对象的实例:

IUser user = new User("Mike", "L");

我想知道为什么程序员在前面创建一个带有接口的User实例?

以这种方式创建实例的原因是什么?

为什么您更喜欢IUser user = new User()而不是User user = new User()

4 个答案:

答案 0 :(得分:0)

您可以使用不同的对象来实现相同的界面。

底层实现是什么并不重要,重要的是实现IUser接口的对象具有允许getFirstNamegetLastName的方法。

这是一个额外的抽象层,使您的代码更简单,更有条理。

答案 1 :(得分:0)

这个想法是该调用之后的代码只知道如何使用该接口。只要界面得到维护,他们就不关心对象的实际情况。可以使用相同接口的许多实现,后续代码也不关心。

只传递实现类(User),所有后续代码必须是该类型。单个用户的情况并不真正需要接口,特别是如果您可以保证该范围。 但是,如果您要使用User,SuperUser,RestrictedUser等 - 他们如何实现不同的方法可能是特定的,而使用该界面的代码将只关心他们可以“做用户可以做什么” do“(例如”已经实现了界面“)

答案 2 :(得分:0)

它被称为多态分配,阅读这个帖子,它可能会给你一些线索:http://www.dreamincode.net/forums/topic/132538-what-is-polymorphic-assignment/

答案 3 :(得分:0)

这对于面向对象编程语言中的多态非常有用。 例如,您可以:

public class BadUser implements Iuser{
  ...
}

public class GoodUser implements Iuser{
  ...
}

和这样的一种方法:

void authenticated(Iuser user);

可以使用:

Iuser a = new BadUser();
Iuser b = new GoodUser();
authenticate(a); //OK;
authenticate(b); //OK;

但这不适用于:

void authenticated(GoodUser user);
Iuser a = new BadUser();
Iuser b = new GoodUser();
authenticate(a); //Error;
authenticate(b); //OK;