如何解决接口与具体类
| 在下面,我有一个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 举报,一经查实,本站将立刻删除。