微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

接口与具体类

如何解决接口与具体类

| 在下面,我有一个Person接口,一个实现类和一个驱动程序类,该类用一个名称初始化Person并再次输出它。使用有什么好处
Person person = new PersonImpl();
代替
PersonImpl person = new PersonImpl();
该接口应该隐藏执行? 这是使用接口的正确方法吗?
public class Driver {

    public static void main(String [] args)
    {
        Person person = new PersonImpl();
        person.setName(\"test name\");
        System.out.println(\"Name is \"+person.getName());
    }

}


public interface Person {

    public void setName(String name);

    public String getName();

}


public class PersonImpl implements Person{

    private String name;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
    

解决方法

这是使用接口的方式。 原因是您以后可以编写另一个实现而无需更改使用
Person
的代码。 所以现在您可以使用
PersonImpl
,但稍后可能需要
OtherTypeOfPersonImpl
。 您可以创建实现相同接口的新类,并且可以将新类与任何其他期望值为“ 3”的代码一起使用。
List
接口就是一个很好的例子。
List
有多种实现方式,例如
ArrayList
LinkedList
等。每一种都有优点和缺点。通过编写使用
List
的代码,您可以让每个开发人员确定哪种类型的
List
最适合他们,并且能够在不做任何更改的情况下处理其中的任何一个。     ,你所做的是正确的。使用“ 13”的优点是在接口和具体实现之间保持松散的耦合。
PersonImpl person = new PersonImpl()
紧密耦合。
Person person = new Person()
甚至不会编译。 想象您有一个巨大的应用程序,并且很多代码取决于PersonImpl对象。现在假设我想更改PersonImpl并创建一个新类PersonImpl2。现在,我必须手动扫描整个项目并在各处进行更改。这甚至可能破坏代码。这被称为紧密耦合,这是一件坏事。相反,如果代码的其余部分依赖于Person对象,那么即使我创建了一个新的PersonImpl2类,由于PersonImpl2实现了Person,一切也将正常工作。     ,我可以想到的一个优势是您可能有2种非常不同的人员,但是您要等到运行时(基于用户输入,配置文件等)来决定使用哪个人员。您可以执行以下操作:
Person person = null;
if ...
   person = new PersonImpl();
else 
   person = new PersonImpl2();
    ,这取决于您要如何使用Person。 就目前而言,拥有它的接口不会给您带来任何真正的好处。 但是,假设某些外星人由于其在Person中定义的行为(例如\“ talks(),walks(),thinks(),feels())而被视为\” Person \“,那么您可能想要将“人”与“人类”和“外星人”分开,以便来自两个非常不同的层次结构的个人-在“哺乳动物”层次结构中说“人类”,在“外星人”中说在“ arachnid”层次结构中,都可以实现Person接口。     ,使用接口而不是具体的类将使您稍后更改实现。 关于JDBC的所有内容都是基于接口的,因此驱动程序可以在以后实现它。 例如,当您使用ResulSet时,您实际上并不关心底层实现的方式或方式(使用Oracle Driver可能类似于OracleResultSet,使用MySQL驱动程序可能类似于MySQLResultSet),但是您知道可用的方法是什么使用。 List或Map也是如此,而不是ArrayList或HashMap     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。