为什么我们将对象存储在接口引用中?

LMK*_*LMK 2 java polymorphism jdbc

我对接口有疑问.
我看过一些代码,他们正在写作

Connection con = Drivermanager.getConnection("URL","User name","Pwd");
Run Code Online (Sandbox Code Playgroud)

这里con(连接接口的参考变量)持有Oracle连接对象.因为我们知道我们正在创建Oracle连接对象,为什么我们不能写

OracleConnectionClass Oraclecon = Drivermanager.getConnection("URL","User name","Pwd");
Run Code Online (Sandbox Code Playgroud)

如果我问一些人他们说,他们通过使用连接接口实现多态性.

但是,有
什么用呢.
我们可以做的

两个引用(con和Oraclecon)创建语句,执行查询等.

simillarly for List和ArrayList
提前感谢

Wil*_*son 7

您知道您现在正在创建的确切类型,但由于您自己的代码更改或实施更改,这可能会在将来发生变化.

多态性用于抽象细节,因此您不必在以后触摸代码.如果您在此处使用了确切类型而不是接口,并且该类型已更改,则您必须更改代码.

这种后果似乎很明显.改变代码是工作,工作需要花钱,因此更少的改变意味着更低的成本.

但它的价格更贵.每次更改稳定代码时都有可能引入错误.这个风险很低,但也值得一提.

这就是他们使用界面的原因.

这是多态性的一个很好的例子.

Queue<Float> queue = new LinkedList<Float>();
Run Code Online (Sandbox Code Playgroud)

我们可以简单地改变行为.

Queue<Float> queue2 = new BlockingQueue<Float>();
Run Code Online (Sandbox Code Playgroud)

或者这个怎​​么样?

Queue<Float> queue3 = new PriorityBlockingQueue<Float>();
Run Code Online (Sandbox Code Playgroud)

所有这些都是我们可以用来快速改变行为的队列.